IDs = np.array([2,1,2])times = np.array([.1,.3,.5,.6,1.2,1.3])
这些数组总是大小相同.现在我需要计算时间的差异,但仅适用于具有相同ID的那些时间.当然,我可以简单地遍历不同的ID
for ID in np.unique(IDs): diffs = np.diff(times[IDs==ID]) print diffs # do stuff with diffs
然而,这是非常低效的,并且两个阵列可能非常大.有没有人对如何更有效地做到这一点有一个好主意?
解决方法 您可以使用array.argsort()并忽略与IDs中的更改相对应的值:>>> ID_ind = IDs.argsort(kind='mergesort')>>> times_diffs = np.diff(times[ID_ind])array([ 0.2,-0.2,0.3,0.6,-1.1,1.2])
要查看需要丢弃的值,可以使用计数器计算每个ID的次数(来自集合导入计数器)
或者只是排序ID,并查看其diff非零的位置:这些是ID更改的索引,以及时间差异无关紧要的位置:
times_diffs[np.diff(IDs[ID_ind]) == 0] # IDs[ID_ind] being the sorted indices sequence
最后你可以用np.split和np.where拆分这个数组:
np.split(times_diffs,np.where(np.diff(IDs[ID_ind]) != 0)[0])
正如您在评论中提到的,argsort()默认算法(quicksort)可能不会保持等于时间之间的顺序,因此必须使用argsort(kind =’mergesort’)选项.
总结以上是内存溢出为你收集整理的python – 计算数组中所选差异的有效方法全部内容,希望文章能够帮你解决python – 计算数组中所选差异的有效方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)