Numpy广播的花式索引

时间:2017-07-22 00:39:39

标签: python numpy broadcast numpy-broadcasting

np.newaxis如何在程序1中的numpy数组索引中工作?它为什么会这样?

计划1:

import numpy as np
x_id = np.array([0, 3])[:, np.newaxis]
y_id = np.array([1, 3, 4, 7])
A = np.zeros((6,8))
A[x_id, y_id] += 1 
print(A)

结果1:

[[ 0.  1.  0.  1.  1.  0.  0.  1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  1.  0.  1.  1.  0.  0.  1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]]

1 个答案:

答案 0 :(得分:1)

newaxisx_id数组转换为列向量,与np.array([[0],[3]])相同。

因此,您要在A[0,3]的笛卡尔积上为[1,3,4,7]编制索引。换句话说,对于第0行和第3行,第1,3,4和7列,最终得到1。

另请参阅np.ix_([0,3], [1,3,4,7])

In [832]: np.stack(np.meshgrid([0,3],[1,3,4,7],indexing='ij'),axis=2)
Out[832]: 
array([[[0, 1],
        [0, 3],
        [0, 4],
        [0, 7]],

       [[3, 1],
        [3, 3],
        [3, 4],
        [3, 7]]])

+=1设置要小心一点;如果索引是重复的,你可能得不到你期望的,或者会得到一个循环。