将值分配给numpy矩阵的多列而不循环

时间:2019-04-10 14:04:58

标签: python numpy

我有一个具有n列的numpy矩阵X,并且我具有n个索引i列表的列表I,以及具有n个值v列表的对应列表V。对于X中的每个列c,我都希望分配索引I [c]到值V [c]。有没有一种方法可以在没有for循环的情况下进行操作,即:

n = 3
X = np.zeros((4,n))
I = [[0,1],[1,2,3],[0]]
V = [[1,1],[2,2,2],[3]]

for c in range(n):
    X[I[c],c] = V[c]

1 个答案:

答案 0 :(得分:1)

我看不到真正的矢量化,但是没有明确的for循环是可行的:

X[np.concatenate(I), np.arange(len(I)).repeat(np.vectorize(len)(I))] = np.concatenate(V)
X
# array([[1., 0., 3.],
#        [1., 2., 0.],
#        [0., 2., 0.],
#        [0., 2., 0.]])

但是我不确定这会比for循环快。