考虑以下矩阵:
array([[0, 4, 2],
[3, 7, 5]])
假设我想将以下数组的子集
col=[0,1,2]
row = [[0,1],[1,2],[0,1]]
可以对行和列进行一些索引,例如
array=np.zeros([2,3],dtype='int64')
for i in range(3):
array[:,i]=X[row[i],col[i]]
然后,如果我将结果存储在变量数组中,我可以使用以下代码完成:
Graphic
有没有办法播放这种操作?我必须将此作为大型文件〜5 Gb的数据清理阶段,我想使用dask来并行化它。但是,如果我第一次避免使用for循环,我会觉得很棒。
答案 0 :(得分:4)
对于NumPy's advanced-indexing
的数组,它将是 -
X[row, np.asarray(col)[:,None]].T
示例运行 -
In [9]: X
Out[9]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [10]: col=[0,1,2]
...: row = [[0,1],[1,2],[0,1]]
In [11]: X[row, np.asarray(col)[:,None]].T
Out[11]:
array([[0, 4, 2],
[3, 7, 5]])