gpt4 book ai didi

python - 计算 Python 中非零值簇的数量?

转载 作者:太空狗 更新时间:2023-10-29 21:21:49 27 4
gpt4 key购买 nike

我的数据看起来像这样:

a=[0,0,0,0,0,0,10,15,16,12,11,9,10,0,0,0,0,0,6,9,3,7,5,4,0,0,0,0,0,0,4,3,9,7,1]

本质上,在非零数字之前有一堆零,我想计算由零分隔的非零数字组的数量。在上面的示例数据中,有 3 组非零数据,因此代码应返回 3。

  • 非零组之间的零数是可变的

有什么好的方法可以在 python 中执行此操作? (同时使用 Pandas 和 Numpy 来帮助解析数据)

最佳答案

a 作为输入数组,我们可以得到一个向量化的解决方案 -

m = a!=0
out = (m[1:] > m[:-1]).sum() + m[0]

或者为了性能,我们可以使用 np.count_nonzero这对于计算 bools 非常有效,就像这里的情况一样 -

out = np.count_nonzero(m[1:] > m[:-1]) + m[0] 

基本上,我们得到一个非零掩码并计算上升沿。为了说明第一个元素也可能是非零且没有任何上升沿,我们需要检查它并添加到总和。

此外,请注意,如果输入 a 是一个列表,我们需要使用 m = np.asarray(a)!=0 代替。

三种情况的样本运行 -

In [92]: a  # Case1 :Given sample
Out[92]:
array([ 0, 0, 0, 0, 0, 0, 10, 15, 16, 12, 11, 9, 10, 0, 0, 0, 0,
0, 6, 9, 3, 7, 5, 4, 0, 0, 0, 0, 0, 0, 4, 3, 9, 7,
1])

In [93]: m = a!=0

In [94]: (m[1:] > m[:-1]).sum() + m[0]
Out[94]: 3

In [95]: a[0] = 7 # Case2 :Add a non-zero elem/group at the start

In [96]: m = a!=0

In [97]: (m[1:] > m[:-1]).sum() + m[0]
Out[97]: 4

In [99]: a[-2:] = [0,4] # Case3 :Add a non-zero group at the end

In [100]: m = a!=0

In [101]: (m[1:] > m[:-1]).sum() + m[0]
Out[101]: 5

关于python - 计算 Python 中非零值簇的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com