我希望匹配出现在两个数组(长度不相等)中的数字,如果匹配,则将它们输出到另一个数组。这些数字是浮点数。
目前,我有一个用Python编写的工作程序,但是当我在大型数据集上运行它时,速度会很慢。我所做的是两个嵌套的for循环。
第一个嵌套的for循环运行array1并检查数组1中是否有来自array2的任何数字。如果匹配,我将其写入一个名为arrayMatch1的数组。
然后我检查array2,看看是否与arrayMatch1匹配。并将最终结果输出到arrayFinal。
arrayFinal将包含存在于array1、array2中的所有数字。
我的问题是:两个嵌套的for循环的复杂度为O(n^2)。这种方法适用于数组长度为25000的数据集,但如果数组长度更长,则会显着减慢。我怎样才能让它更有效率呢?数字是浮点数,并且始终采用此格式的######.###
我想要加速我的程序,但仍然使用Python,因为它很简单。有没有更好的方法在两个数组之间找到匹配?
发布于 2016-09-11 23:24:40
为什么不直接找到两个列表的交集呢?
a = [1,2,3,4.3,5.7,9,11,15]
b = [4.3,5.7,6.3,7.9,8.1]
def intersect(a, b):
return list(set(a) & set(b))
print intersect(a, b)输出:
5.7、4.3
发布于 2016-09-11 23:27:15
所以你基本上要做的就是找到2列表的交集(逻辑上正确的项)。
首先,你需要消除列表本身的重复项,set是一个很好的方法,然后你可以直接&这些列表,你就可以开始工作了。
a = [23.3213,23.123,43.213,12.234] #List First
b = [12.234,23.345,34.224] #List Second
def intersect(a, b):
return list(set(a) & set(b))
print intersect(a, b)https://stackoverflow.com/questions/39437603
复制相似问题