gpt4 book ai didi

python - “堆积”数组,通过求和折叠

转载 作者:行者123 更新时间:2023-12-01 01:25:16 27 4
gpt4 key购买 nike

给定一个 numpy 数组,我想总结统一的元素 block 以形成一个新的、更小的数组。它与分箱类似,但不是按频率分箱。除了通过示例(如下)之外,我不确定如何描述它。

问题:是否有用于此的函数或更清晰的方法(使用 numpy/scipy)?我研究了 digitizehistogram,但认为它们的实现很冗长。我也考虑过巧妙的索引,但它超出了我的范围,并且可能会产生一长串难看的代码。

import numpy as np  

old_data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])
bin_size = 3
new_data = np.zeros(int(np.size(old_data) / bin_size))
for ind, val in enumerate(new_data):
leap = ind*bin_size
new_data[ind] =
np.sum(old_data[leap:leap+bin_size])
print(old_data, '->', bin_size, ':', new_data)

# [0 1 2 3 4 5 6 7 8] -> 3 : [ 3. 12. 21.]

最佳答案

假设有整数个垃圾箱,您可以通过 reshape 来完成此操作:

old_data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])
bin_size = 3

new_data = old_data.reshape(-1, bin_size).sum(axis=1)

new_data 将具有所需的值:

array([ 3, 12, 21])

如果bin_size没有均匀地划分为old_data.size,您可以改用resize:

old_data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bin_size = 3

old_data.resize(old_data.size//bin_size + 1, bin_size)
new_data = old_data.sum(axis=1)

new_data 的值为:

array([ 3, 12, 21, 19])

使用 resize 的缺点是修改 old_data ,因此如果您想保留 old_data ,您可能应该复制在调整大小之前进行。

关于python - “堆积”数组,通过求和折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com