Python 间接索引

Python indirect indexing

如果你知道怎么做,这可能是一个超级简单的问题,但我就是想不出语法:

我有一个 5x10 零数组:y1 = np.zeros((5,10)) 和一个 5x1 索引数组:index=np.array([2,3,2,5,6])。对于 y1 的每一行,我想在索引给出的列中设置 1。结果看起来像

array([[ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.]])

任何人都可以帮忙:-) ?

只需使用枚举()

import numpy as np

y1 = np.zeros((5,10))
index=np.array([2,3,2,5,6])


for i,item in enumerate(y1):
    item[index[i]] = 1

print(y1)
# [[ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
 # [ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]
 # [ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
 # [ 0.  0.  0.  0.  0.  1.  0.  0.  0.  0.]
 # [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]]

这是你想要的吗?

您可以使用 array[index_1, index_2] 进行多维数组索引。针对您的问题:

y1[range(y1.shape[0]), index] = 1

range(y1.shape[0]) 生成数组 [0,1,...,n-1],其中 n 是 y1 中的行数。该数组是您的行索引,索引是您的列索引。