首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用条件计算python数组不同元素的平均值最快的方法是什么?

用条件计算python数组不同元素的平均值最快的方法是什么?
EN

Stack Overflow用户
提问于 2018-07-27 21:45:22
回答 1查看 98关注 0票数 -1

下面的Python代码在about 2 sec中执行。在6 ms中执行C中的等效代码。

一些解释:我有2个ADC通道(adc0adc1adc0adc1,...)的串行数据。如果是adc1 <= 10,我必须将adc1加到和上,否则我必须加adc0。这些值乘以不同的系数(0.10.01)。

代码语言:javascript
复制
#!/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执行此操作最快的方法是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 04:04:13

首先,你需要修正你的平均计算(运算符优先级):

代码语言:javascript
复制
avg_sum1 / (len(dd) / 2)  # or avg_sum1 / len(dd) * 2

Out[]:
0.31740819000001924
2.8 s ± 28.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

您可以在numpy中执行此操作,例如:

代码语言:javascript
复制
In []:
np.where(dd[1::2] <= 10, dd[1::2]*0.1, dd[0::2]*0.01).mean()

Out[]:
0.31740818999999987
10.8 ms ± 61.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51559330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档