我有在纯python中计算平均速度的算法:
speed = [...]
avg_speed = 0.0
speed_count = 0
for i in speed:
if i > 0: # I dont need zeros
avg_speed += i
speed_count += 1
if speed_count == 0:
return 0.0
return avg_speed / speed_count
Run Code Online (Sandbox Code Playgroud)
有没有办法用Numpy重写这个功能?
hel*_*ker 24
该函数numpy.average
可以接收一个weights
参数,您可以将一个由某些条件生成的布尔数组应用于数组本身 - 在这种情况下,一个元素大于0:
average_speed = numpy.average(speeds, weights=(speeds > 0))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
Tim*_*imY 17
我很惊讶没有人提出最短的解决方案:
speeds_np = np.array(speeds)
speeds_np[speeds_np>0].mean()
Run Code Online (Sandbox Code Playgroud)
说明:
speedsNp > 0
创建一个满足(in)相等的相同大小的布尔数组.如果输入speedsNp
,它只产生speedNp
布尔数组值的相应值True
.那么你需要做的只是取得mean()
结果.
eum*_*iro 10
import numpy as np
def avg_positive_speed(speed):
s = np.array(speed)
positives = s > 0
if positives.any():
return s[positives].mean()
else:
return 0.
speed = [1., 2., 0., 3.]
print avg_positive_speed(speed)
# prints 2.0
print avg_positive_speed([0., 0.])
# prints 0.0
Run Code Online (Sandbox Code Playgroud)