下面的Python
代码大约在2 sec
中执行。C
中的等效代码在6 ms
中执行。你知道吗
一些解释:我有2个ADC
通道的串行数据(adc0
,adc1
,adc0
,adc1
,…)。
如果adc1 <= 10
我必须在和中加adc1
,否则我必须加adc0
。这些值乘以不同的系数(0.1
和0.01
)。你知道吗
#!/usr/bin/env python
import time
import numpy as np
dd = np.random.randint(0, 20, size=(2*1000*1000))
t_start = time.clock()
avg_sum1 = 0.0
BlockOffset = 0
while BlockOffset < len(dd):
if dd[BlockOffset + 1] <= 10:
avg_sum1 += dd[BlockOffset + 1] * 0.1
else:
avg_sum1 += dd[BlockOffset + 0] * 0.01
BlockOffset += 2
print('Avg: ' + str(avg_sum1 / len(dd) / 2))
print('Exe time: ' + str(time.clock() - t_start))
使用内置函数或numpy
最快的方法是什么?你知道吗
首先,您需要修正平均计算值(运算符优先级):
您可以在
numpy
中执行此操作,例如:有很多方法可以加速。这里有一个使用
pandas
的解决方案(也许也可以只使用numpy
)。你知道吗在这段代码中,
f1()
是您的原始函数,f2()
使用的是pandas
。你知道吗这段代码显示
f2()
更快,使用了大约123 ms
(少于f1()
时间的10%)。你知道吗Obs:我假设这两个函数之间的
sum
和avg
的差异源于如何处理浮点精度,但我不确定。 对于您的用例,您需要考虑几个小数位?这个小小的差别重要吗?你知道吗相关问题 更多 >
编程相关推荐