我有一个包含10万行的2-D numpy数组。我需要返回其中的一部分行(我需要执行很多次这样的操作,因此效率很重要)。
一个模拟例子如下:
当然,a和b中都有更多的行,因此我想避免循环。我尝试过创建字典并使用np.nonzero,但仍然有些困惑。
非常感谢您提供的任何想法!
编辑:请注意,在这种情况下,b是标识符而不是索引。以下是修订后的示例:
一个模拟例子如下:
import numpy as np
a = np.array([[1,5.5],
[2,4.5],
[3,9.0],
[4,8.01]])
b = np.array([2,4])
所以...我想从a中返回一个数组,其中第一列由b标识行:
c=[[2,4.5],
[4,8.01]]
当然,a和b中都有更多的行,因此我想避免循环。我尝试过创建字典并使用np.nonzero,但仍然有些困惑。
非常感谢您提供的任何想法!
编辑:请注意,在这种情况下,b是标识符而不是索引。以下是修订后的示例:
import numpy as np
a = np.array([[102,5.5],
[204,4.5],
[343,9.0],
[40,8.01]])
b = np.array([102,343])
And I want to return:
c = [[102,5.5],
[343,9.0]]
(a - b) == 0
与a == b
是相同的。 - Sven MarnachO(len(a)*len(b))
,理论上只需要O((len(a)+len(b))*log(len(b)))
就足够了(对b
进行排序,并对a[:,0]
的每个元素进行二进制搜索)。有什么想法可以改进吗?我们能使用searchsorted()
吗? - Sven Marnachnp.searchsorted
在这种情况下易于应用,而且速度显着更快。 - JoshAdel