我正在使用numpy 1.6.2和python 2.7处理非常大的矩阵。给定一个N x M
矩阵A
和一个映射B
,在这里可以为每一行找到要删除的元素的索引。这是一个例子:
A =
26 55 29 30
31 65 34 35
36 75 39 40
41 85 44 45
46 95 49 50
B =
2
0
1
3
2
结果将是:
A =
26 55 30
65 34 35
36 39 40
41 85 44
46 95 50
实际上,为了得到这个,我创建了一个像这样的循环:
for i in xrange(size(B)):
A[i,:] = concatenate(A[i,0:B[i]],A[i,B[i]+1:])
但这确实很慢。有没有更快的方法来删除我需要的元素?
谢谢你们!
您可以A
为此创建一个蒙版:
>>> mask = np.arange(4) != np.vstack(B)
>>> mask
array([[ True, True, False, True],
[False, True, True, True],
[ True, False, True, True],
[ True, True, True, False],
[ True, True, False, True]], dtype=bool)
然后使用它从中过滤掉不需要的(False
)值A
,重新整形,然后重新绑定到变量名A
:
>>> A = A[mask].reshape(5, 3)
>>> A
array([[26, 55, 30],
[65, 34, 35],
[36, 39, 40],
[41, 85, 44],
[46, 95, 50]])
这应该比使用更快,concatenate
因为它避免了在Pythonfor
循环的每次迭代中复制数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句