我有一个numpy数组:
A=np.zeros((5,10))
并且我想根据另一个数组N=np.array([7, 2, 9, 4, 5])
喜欢:A[:,N]=1;
0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
我该怎么做?
答案 0 :(得分:3)
由于您要为每行设置一个元素,您需要使用arange(5)
对第一个轴进行幻想索引。这可以被认为是设置索引(I0[0], N[0])=(0,7)
,(I0[1],N[1])=(1,2)
,...
I0 = np.arange(A.shape[0])
A[I0, N] = 1
A
=>
array([[ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])
A.nonzero()
=> (array([0, 1, 2, 3, 4]), array([7, 2, 9, 4, 5]))