【发布时间】:2020-02-09 20:28:23
【问题描述】:
我想使用矢量化将上一行中的值添加到下一行。例如,如果我有 ndarray,
[[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3]]
然后通过该方法进行一次迭代后,将导致
[[0, 0, 0, 0],
[1, 1, 1, 1],
[3, 3, 3, 3],
[5, 5, 5, 5]]
可以简单地使用 for 循环来做到这一点:
import numpy as np
def addAboveRow(arr):
cpy = arr.copy()
r, c = arr.shape
for i in range(1, r):
for j in range(c):
cpy[i][j] += arr[i - 1][j]
return cpy
ndarr = np.array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]).reshape(4, 4)
print(addAboveRow(ndarr))
我不确定如何使用矢量化来解决这个问题。我认为应该使用切片机?另外,我不确定如何处理顶部边框的问题,因为不应该在第一行添加任何内容。任何帮助,将不胜感激。谢谢!
注意:我对矢量化真的很陌生,所以解释一下会很棒!
【问题讨论】:
-
您可以创建第二个数组,其顶行为零,所有其他行就像第一行到最后一行一样,但原始数组的一行,然后将其添加到第一个数组中。如果它适合内存,应该足够快。
-
这行得通。我只是想知道是否有更“numpythonic”的方式来解决这个问题。
标签: numpy vectorization numpy-ndarray