如何使用索引数组访问沿着轴1的2D numpy数组元素?

yshpjwxd  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(187)

N是形状为(m,n)的numpy数组,A是索引(m,)的数组,包含0和n-1之间的值,包括。
如果I i是从0到m-1包括的索引,那么我想要访问元素N[i,A[i]]
举例来说:

  1. import numpy as np
  2. m = 2000
  3. n = 10
  4. N = np.zeros((m,n))
  5. A = np.random.choice(n, m)
  6. N[???, A] = 1

字符串
我期望上面的示例代码生成一个形状为(m,n)的数组N,最初所有的零,然后设置N[i,j]=1,其中A[i]=j
我尝试了N[:, A]=1,但它将数组N的所有元素都更改为1,这不是我想要实现的。

vx6bjr1n

vx6bjr1n1#

使用:索引所有行,所以执行N[:,A] = 1是告诉numpy获取所有行,并在A列中将值设置为1。您只需要一对一的行和列选择。最简单的方法是使用np.arange

  1. N[np.arange(m), A] = 1

字符串
现在,A中的每个值都有一个对应的行,这导致m行和列选择。

gmxoilav

gmxoilav2#

您可以按如下方式设置条件N[i,j]=1 where A[i] == j

  1. # Using conditional selection
  2. condition = np.arange(m) == A
  3. N[condition] = 1

字符串

相关问题