Numpy 向量化:将上面的行添加到 ndarray 上的当前行
Numpy Vectorization: add row above to current row on ndarray
我想使用矢量化将上一行中的值添加到下一行。例如,如果我有 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))
虽然我不确定如何使用矢量化来解决这个问题。我认为应该使用切片器?另外,我不太确定如何处理顶部边框的问题,因为第一行不应添加任何内容。任何帮助,将不胜感激。谢谢!
注意:我对矢量化真的很陌生,所以解释会很好!
可以直接使用索引:
b = np.zeros_like(a)
b[0] = a[0]
b[1:] = a[1:] + a[:-1]
>>> b
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[3, 3, 3, 3],
[5, 5, 5, 5]])
备选方案:
b = a.copy()
b[1:] += a[:-1]
或者:
b = a.copy()
np.add(b[1:], a[:-1], out=b[1:])
您可以尝试以下方法
np.put(arr, np.arange(arr.shape[1], arr.size), arr[1:]+arr[:-1])
我想使用矢量化将上一行中的值添加到下一行。例如,如果我有 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))
虽然我不确定如何使用矢量化来解决这个问题。我认为应该使用切片器?另外,我不太确定如何处理顶部边框的问题,因为第一行不应添加任何内容。任何帮助,将不胜感激。谢谢!
注意:我对矢量化真的很陌生,所以解释会很好!
可以直接使用索引:
b = np.zeros_like(a)
b[0] = a[0]
b[1:] = a[1:] + a[:-1]
>>> b
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[3, 3, 3, 3],
[5, 5, 5, 5]])
备选方案:
b = a.copy()
b[1:] += a[:-1]
或者:
b = a.copy()
np.add(b[1:], a[:-1], out=b[1:])
您可以尝试以下方法
np.put(arr, np.arange(arr.shape[1], arr.size), arr[1:]+arr[:-1])