从两个数据集中及时发现数据匹配的效率

时间:2015-02-05 16:42:34

标签: python performance python-3.x time dataset

列表中的数量A,相关时间列表。

列表中的数量B,Tb是关联时间列表。

A和B的大小可能非常不同,Ta / Tb中的元素自1970年以来已经转换为小数秒。

我有一个代码可以很好地存储索引,其中数量A至少在数量B的1小时内(如果匹配数<50,则增加时间间隔。)

但是这部分花了大部分时间在我的代码中计算,至少2分钟(非常大的数据集最多20个),我想知道是否有任何方法可以使它更有时间效率。我完全没有关于python的时间效率的概念,所以如果这是天真的道歉。

大小如果为10 4

B大小为10 3

a=0
it=1
#I want at least 50 match
while(a<50):
    differences=range(len(Ta))

    #those are the indices of the times in Ta[] which are used for comparison
    A_idx=[-1]*len(Tb)
    A_idx1=[-1]*len(Tb)

    for i in range(0,len(Tb)):
        for j in range(0,len(Ta)):
            differences[j]=fabs(Tb[i]-Ta[j])
        val,idx=min((val,idx) for (idx,val) in enumerate(differences))
        # <it means the closest Ta within it hours.
        if val/3600<it:
            A_idx[i]=idx
            A_idx1[i]=idx
    a=len(A_idx)-A_idx.count(-1)
    if a<50:
        it=it+1

#those are the indices of the times in Tb[] which are used for comparison
B_idx=[i for i in range(len(A_idx)) if A_idx[i]!=-1]

#get rid of the useless values in A_idx1
A_idx1[:]=(value for value in A_idx1 if value!=-1)

我有A_idx和A_idx1是相同的东西,因为当我定义B_idx时它也改变了A_idx(因为我在A_idx中的[id(i)为i)。

从时间效率的角度来看,是否存在任何差的线? (请注意,while循环实际上从未进入过它= 2,它只是一个安全性,我没有在1小时内完成少于50次重合的数据集) 如果它在任何其他方面也很差,请随时告诉我!

哦,如果我为同一个数据集连续两次运行代码,第二次运行可能比第一次运行时间长达200秒,任何理由呢?它只是依赖于我的电脑吗?

0 个答案:

没有答案