我有一个二维numpy数组:
arr = np.array(([[6,1,2],
[3,4,5],
[0,7,8]]))
我使用了另一个一维numpy数组:
value = np.asarray([9,8,7,6,5,4,3,2,1])
我想用一维数组的索引值更改2D数组的值。
例如:
在位置(0,0)的2D数组中,我的值为6。因此,我必须将值(0,0)修改为显示在一维数组的索引6上的值,因此是3。
到目前为止,我有这样的代码:
value = np.asarray([9,8,7,6,5,4,3,2,1])
arr = np.array(([[6,1,2],[3,4,5],[0,7,8]]))
print(arr)
#[[6 1 2]
#[3 4 5]
#[0 7 8]]
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
arr[i,j] = value[arr[i,j]]
print(arr)
#[[3 8 7]
#[6 5 4]
#[9 2 1]]
问题是,这段代码在大型表上需要时间。(4096平方公里的阵列,10秒)
有没有解决这个问题的有效办法?
发布于 2022-02-24 14:46:52
这很简单,您只需要一个命令。Numpy自动处理矢量化。
arr = value[arr]
下面是您提供的数据的一个示例:
>>> value[arr]
array([[3, 8, 7],
[6, 5, 4],
[9, 2, 1]])
https://stackoverflow.com/questions/71253688
复制相似问题