我有一个具有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]
答案 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循环快。