2024-06-10 10:29:15 发布
网友
我有用纯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
有没有办法用Numpy重写这个函数?
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
我很惊讶没有人提出最短的解决方案:
speeds_np = np.array(speeds) speeds_np[speeds_np>0].mean()
说明:
speedsNp > 0创建一个满足(in)等式的大小相同的布尔数组。如果输入speedsNp,它只产生对应的speedNp值,其中布尔数组的值为True。那么,您只需要获取结果的mean()。
speedsNp > 0
speedsNp
speedNp
True
mean()
函数numpy.average可以接收一个weights参数,在该参数中,您可以将由应用于数组本身的某个条件生成的布尔数组放在该数组中-在这种情况下,元素大于0:
numpy.average
weights
average_speed = numpy.average(speeds, weights=(speeds > 0))
希望这有帮助
我很惊讶没有人提出最短的解决方案:
说明:
speedsNp > 0
创建一个满足(in)等式的大小相同的布尔数组。如果输入speedsNp
,它只产生对应的speedNp
值,其中布尔数组的值为True
。那么,您只需要获取结果的mean()
。函数
numpy.average
可以接收一个weights
参数,在该参数中,您可以将由应用于数组本身的某个条件生成的布尔数组放在该数组中-在这种情况下,元素大于0:希望这有帮助
相关问题 更多 >
编程相关推荐