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 中的行数。该数组是您的行索引,索引是您的列索引。
如果你知道怎么做,这可能是一个超级简单的问题,但我就是想不出语法:
我有一个 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 中的行数。该数组是您的行索引,索引是您的列索引。