python – 计算数组中所选差异的有效方法

python – 计算数组中所选差异的有效方法,第1张

概述我有两个数组作为模拟脚本的输出,其中一个包含ID和一次,例如: ids = np.array([2, 0, 1, 0, 1, 1, 2])times = np.array([.1, .3, .3, .5, .6, 1.2, 1.3]) 这些数组总是大小相同.现在我需要计算时间的差异,但仅适用于具有相同ID的那些时间.当然,我可以简单地遍历不同的ID for id in np.unique(ids 我有两个数组作为模拟脚本的输出,其中一个包含ID和一次,例如:

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 – 计算数组中所选差异的有效方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存