例如。
>>>idx_val_list = [[0, 1], [2, 3], [4, 5]]
或
>>>idx_list = [0, 2, 4]
>>>val_list = [1, 3, 5]
>>>vector = [0,0,0,0,0,0,0,0]
寻找实现批量更新的有效方法,例如
>>>vector.update(indexes=idx_list, values=val_list)
>>>vector
[1,0,3,0,5,0,0,0]
除了for循环之外,还有其他有效方法可以达到这个要求吗?
答案 0 :(得分:4)
我建议使用np.put代替循环或列表理解。
试试这个;
>>> vector = np.array([0,0,0,0,0,0,0,0])
>>> idx_list = [0, 2, 4]
>>> val_list = [1, 3, 5]
>>> vector
array([0, 0, 0, 0, 0, 0, 0, 0])
>>> np.put(vector, idx_list, val_list)
>>> vector
array([1, 0, 3, 0, 5, 0, 0, 0])
答案 1 :(得分:2)
for idx,val in zip(idx_list, val_list):
vector[idx] = val
答案 2 :(得分:2)
In [149]: idx_list = [0, 2, 4]
...:
...: val_list = [1, 3, 5]
...:
...: vector = [0,0,0,0,0,0,0,0]
...:
In [150]: for i,j in zip(idx_list, val_list):
...: vector[i] = j
...:
In [151]: vector
Out[151]: [1, 0, 3, 0, 5, 0, 0, 0]
答案 3 :(得分:1)
如果您没有重复索引,@ Meemduh使用np.put
您也可以v[idx_list] = val_list
如果您想累积值,也可以使用np.add.at
v = np.array(vector)
np.add.at(v, idx_list, val_list)
v
Out[]: array([1, 0, 3, 0, 5, 0, 0, 0])
如果您的初始向量非常大,您可能希望将其设为scipy.sparse.lil_matrix
,因为这样可以直接将值分配到其位置,而无需在其他位置分配零。
答案 4 :(得分:0)
使用numpy
import numpy
vector=numpy.array(vector)
vector[idx_list]=val_list
print vector