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.]]
答案 0 :(得分:1)
newaxis
将x_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
设置要小心一点;如果索引是重复的,你可能得不到你期望的,或者会得到一个循环。