Python 广播:使用 1D 向量作为 2D 数组一维的索引



假设我有一个形状m x n的 2D 数组,table

假设我有一个一维数组,形状col_indices m,以及值方面的范围[0,n)

最后,假设我有一个值数组,vals形状u,按i索引。


在伪代码中,我想写:

table[:,col_ind[:]] += vals[i]

并且,手动写出:

t = [ [ 0,0,0]
      [ 0,0,0]
      [ 0,0,0] ]
c = [ 0, 1, 2 ]
v = [ 1, 10, 1000 ]
i = 1
# then f(t,c,v,i) where f is the broadcast function
f(t,c,v,i) outputs:
t = [ [ 10,  0,  0 ]
      [  0, 10,  0 ]
      [  0,  0, 10 ] ]

通过将行片替换为整数数组来使用高级索引:

t[np.arange(c.size), c] = v[i]
t
#array([[10,  0,  0],
#       [ 0, 10,  0],
#       [ 0,  0, 10]])

最新更新