如何找到一系列损失的数量

问题描述 投票:0回答:1

我有一个数组,例如 [0, 0, 0, 1, 2, -1, -2, 5, 8, 4, 5.5],想要查找某个元素小于前一个元素的次数(忽略开头的 0 代表缺失数据);在这个例子中,答案是 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)都有效。

python statistics frequency loss
1个回答
0
投票

这是一种方法:

  • 使用
    np.argmax
    获取第一个非零值 (
    v != 0
    ) 的索引并从那里进行切片。
  • 应用
    np.diff
    ,检查是否有小于 0 (
    < 0
    ) 的值,然后应用
    np.sum
    True
    (1) 值求和。
  • 最后将总和除以切片的长度。
import numpy as np

v = np.array([0, 0, 0, 1, 2, -1, -2, 5, 8, 4, 5.5])

v_slice = v[np.argmax(v != 0):]

result = np.sum(np.diff(v_slice) < 0) / len(v_slice)

result
# 0.375
© www.soinside.com 2019 - 2024. All rights reserved.