在为numpy结构赋值时遇到问题。例如,假设我有一个numpy数组Src(N*K)
和一个索引数组Index(N*1)
,其值在0~K-1之间。我的任务是根据索引将Src
值分配给数组Target(N*1)
。
一种天真的方式是使用for循环:
for i in xrange(Index.shape[0]):
Target[i,:] = Src[i,Index[i]]
但是,我认为应该有其他优雅的方式来实现这个任务而不用for循环。那么有人可以帮助我吗?
答案 0 :(得分:0)
你可以这样做:
>>> Target = np.zeros((4, 4))
>>> Src = np.ones((4, 4))
>>> Index = np.array([1, 2])
>>> Target[i, :] = Src[i, Index, None]
>>> Target
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])