这个操作需要尽可能快地应用到包含数百万个元素的实际数组中。这是问题的简单版本。
所以,我有一个随机的唯一整数数组(通常是数百万个元素)。
totalIDs = [5,4,3,1,2,9,7,6,8 ...]
我有另一个可以创建掩码的唯一整数数组(通常是数万个)。
subsampleIDs1 = [5,1,9]
subsampleIDs2 = [3,7,8]
subsampleIDs3 = [2,6,9]
...
我可以用 numpy 来做
掩码 = np.in1d(totalIDs,subsampleIDs,assume_unique=True)
然后我可以使用掩码提取我想要的另一个数组的信息(比如第 0 列包含我想要的那个)。
变量=所有变量[掩码][:,0]
现在鉴于 ID 在两个数组中都是唯一的,有什么方法可以显着加快速度。为几千个点 (subsampleIDs) 与数百万个 ID (totalID) 匹配构建掩码需要很长时间。
我想通过它一次并写出索引的二进制文件(以加快未来的搜索速度)。
for i in range(0,3):
mask = np.in1d(totalIDs,subsampleIDs,assume_unique=True)
index[mask] = i
其中 X 在 subsampleIDsX 中。然后我可以这样做:
for i in range(0,3):
if index[i] == i:
rowmatch = i
break
variable = allvariables[rowmatch:len(subsampleIDs),0]
对?但这也很慢,因为循环中有一个条件来查找第一次匹配的时间。是否有更快的方法来查找数字何时首次出现在有序数组中,这样条件不会减慢循环速度?