python – Numpy矢量化算法,用相同的时间戳来总结数字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Numpy矢量化算法,用相同的时间戳来总结数字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1826字,纯文字阅读大概需要3分钟。
内容图文
我有两个数组P和T. P [i]是一个数字,其时间戳是T [i];可能存在重复的时间戳.
我想生成另外两个数组Q和U,其中Q [i]具有时间戳U [i],并且Q [i]是P中具有时间戳U [i]的所有元素的总和;
例如,对于
P = [1,2,3,4,5]
T = [0,0,1,1,1]
我会生产
Q = [3,12]
U = [0,1];
有没有一种快速的方法在numpy中这样做,希望它可以矢量化它?
解决方法:
使用numpy 1.4或更高版本:
import numpy as np
P = np.array([1, 2, 3, 4, 5])
T = np.array([0, 0, 1, 1, 1])
U,inverse = np.unique(T,return_inverse=True)
Q = np.bincount(inverse,weights=P)
print (Q, U)
# (array([ 3., 12.]), array([0, 1]))
请注意,这不是最快的解决方案.我用这种方式测试速度:
import numpy as np
N = 1000
P = np.repeat(np.array([1, 2, 3, 4, 5]),N)
T = np.repeat(np.array([0, 0, 1, 1, 1]),N)
def using_bincount():
U,inverse = np.unique(T,return_inverse=True)
Q = np.bincount(inverse,weights=P)
return Q,U
# (array([ 3., 12.]), array([0, 1]))
def using_lc():
U = list(set(T))
Q = [sum([p for (p,t) in zip(P,T) if t == u]) for u in U]
return Q,U
def using_slice():
U = np.unique(T)
Q = np.array([P[T == u].sum() for u in U])
return Q,U
对于小型阵列,wim’s solution更快(N = 1):
% python -mtimeit -s'import test' 'test.using_lc()'
100000 loops, best of 3: 18.4 usec per loop
% python -mtimeit -s'import test' 'test.using_slice()'
10000 loops, best of 3: 66.8 usec per loop
% python -mtimeit -s'import test' 'test.using_bincount()'
10000 loops, best of 3: 52.8 usec per loop
对于大型阵列,joris’s solution更快(N = 1000):
% python -mtimeit -s'import test' 'test.using_lc()'
100 loops, best of 3: 9.93 msec per loop
% python -mtimeit -s'import test' 'test.using_slice()'
1000 loops, best of 3: 390 usec per loop
% python -mtimeit -s'import test' 'test.using_bincount()'
1000 loops, best of 3: 846 usec per loop
我怀疑在这种情况下是否重要,但基准测试可能会根据numpy,python,OS或硬件的版本而改变.在您的机器上重复这些基准测试并不会有什么坏处.
内容总结
以上是互联网集市为您收集整理的python – Numpy矢量化算法,用相同的时间戳来总结数字全部内容,希望文章能够帮你解决python – Numpy矢量化算法,用相同的时间戳来总结数字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。