列表中的数量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秒,任何理由呢?它只是依赖于我的电脑吗?