python中的二维数组操作

irc*_*ham 1 python arrays numpy

我有一个二维数组,我希望i每一行中的数组元素i-1被同一行中的元素减少

我试过这个代码:

data = np.arange(12).reshape(3,4)
print(data)
for row in data:
    for cell in row:
        data[cell] = data[cell]-data[cell-1]

print(data)
Run Code Online (Sandbox Code Playgroud)

我得到了这样的输出

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
Traceback (most recent call last):
  File "D:/testing/test.py", line 55, in <module>
    data[cell] = data[cell]-data[cell-1]

IndexError: index -8 is out of bounds for axis 0 with size 3
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[[1 1 1]
 [1 1 1]
 [1 1 1]]
Run Code Online (Sandbox Code Playgroud)

主要过程是data[i] = data[i]-data[i-1]。我需要这个过程来处理超过 1024x1024 的大量数据,所以我需要一些高效的东西

yat*_*atu 6

您可以对两个数组进行切片并减去:

data[:,1:] - data[:,:-1]

array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

或采取np.diff

np.diff(data)
Run Code Online (Sandbox Code Playgroud)