我有一个像[0, 0, 0, 1, 2, -1, -2, 5, 8, 4, 5.5]
这样的数组,想找出一个元素小于前一个元素的次数(忽略开头代表缺失数据的零)。
在这个例子中,答案是3(代表-1,-2和4),我必须将其除以有效数字的数量(例如,8),预期结果为3/8 = 0.375。
我写了一个指令,想知道是否有一个更有效的方法来拥有它,因为我必须运行它数百万次。
我目前的指导:
v = np.array([0, 0, 0, 1, 2, -1, -2, 5, 8, 4, 5.5])
print(np.sum((v < np.roll(v,1))[1:]) / np.sum(v != 0)) # loss frequency
有线索吗?
注意:一旦有第一个有效数字(即与0不同),以下所有数字(包括0)均有效。
2条答案
按热度按时间6ioyuze21#
使用
np.trim_zeros
(修剪前导零)和简单减法:或者使用
np.diff
进行减法:kiz8lqtg2#
这里有一个方法:
np.argmax
获取第一个非零值(v != 0
)的索引,并从那里切片。np.diff
,检查小于0(< 0
)的值,并应用np.sum
对True
(1)值求和。或者,完全具有
np
功能: