如何解决使用带有 numpy 数组 Python 的切片的求和函数
有没有一种方法可以索引一个 numpy 列表,就像我在普通列表函数中的索引一样。我想遍历列表中的 3 个元素,每次向上移动一个点,并对所有切片求和。所以它会通过 1,2,3
获得第一个和,然后它会通过 2,3,4
获得第二个和等等。下面的代码给了我一个标量错误,有没有办法我可以执行这个函数下面不使用 for 循环。
import numpy as np
n = 3
arr = np.array([1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])
start = np.arange(0,len(arr)-n,1)
stop = np.arange(n-1,len(arr),1)
sum_arr = np.sum(arr[start:stop])
解决方法
我认为这应该有效:
sum_arr = arr[1:-1] + arr[2:] + arr[:-2]
这将创建一个比 arr 短两个值的数组,因为 arr 中的最后一个元素没有两个额外的元素来创建总和。
如果您希望数组与原始 arr 的长度相同,则可以像这样在 arr 数组中附加两个额外的零:
arr = np.append(arr,[0,0])
sum_arr = arr[1:-1] + arr[2:] + arr[:-2]
,
要对 n
元素的滑动范围求和,您可以使用 convolve1d
,并将所有权重设置为 1
。使用 'constant'
边界模式,默认填充值为 0
。由于过滤器窗口默认居中,因此您需要调整两端结果的长度。
import numpy as np
from scipy.ndimage import convolve1d
arr = np.arange(1,26)
for n in range(2,6):
k,r = divmod(n,2)
print(n,convolve1d(arr,np.ones(n),mode='constant')[k+r-1:-k])
结果:
2 [ 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49]
3 [ 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72]
4 [ 10 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82 86 90 94]
5 [ 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。