gpt4 book ai didi

Python:优化删除在 numpy 数组中未对齐的元素

转载 作者:行者123 更新时间:2023-11-28 22:47:29 26 4
gpt4 key购买 nike


我正在使用 numpy 1.6.2python 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)

然后使用它从A中过滤掉不需要的(False)值, reshape ,然后重新绑定(bind)到变量名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 更快,因为它避免了为 Python for 循环的每次迭代复制数组。

关于Python:优化删除在 numpy 数组中未对齐的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com