首页 > 解决方案 > 使用另一个二维数组作为索引为二维数组赋值

问题描述

我有一个 2D mxn 数组 A 和另一个 2D qxp 数组 B。我想在 B 中列出的每个坐标处为 A 分配值 1。

我知道我可以首先在axis = 0处获得b的长度,然后编写一个循环来做到这一点,例如 A[B[i,0]][b[i,1]] = 1; 但我正在处理一个大数据集,我想看看是否有任何方法可以在没有 for 循环的情况下做到这一点。

标签: pythonarrayspython-3.x

解决方案


您可以通过将 B 的列作为 A 的索引传递来直接分配值。您不需要遍历 B 的行。

A[B[:,0],B[:,1]]=1

这是一个更详细的示例

A=np.zeros((4,4))

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

B=np.array([[2,1],[2,2],[0,2],[3,0]])

array([[2, 1],
       [2, 2],
       [0, 2],
       [3, 0]])

# directly pass each of the columns of B as indices of A
A[B[:,0],B[:,1]] = 1

print(A)

array([[0., 0., 1., 0.],
       [0., 0., 0., 0.],
       [0., 1., 1., 0.],
       [1., 0., 0., 0.]])

推荐阅读