gpt4 book ai didi

python - 如何计算 Numpy 数组中每个零左边的零个数

转载 作者:太空狗 更新时间:2023-10-30 01:56:55 24 4
gpt4 key购买 nike

我有一个像这样的 numpy 二进制数组:

   Array A = [1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0]

我想计算每个 1 左边有多少个 0,然后将它返回到另一个数组中,对于这个例子来说,这个数组看起来像这样:

nb_1s = [0, 0, 1, 2, 2, 5]

前两个 1 的左边没有 0,所以数组的前两个数字是 0 等等...

我知道首先我必须在我的数组中启动一个包含 1 的数组:

def give_zeros(binary_array):
binary_array = np.asarray(binary_array)
nb_zeros = np.zeros(binary_array.sum())


return nb_zeros

但我不确定如何计算零的数量。我应该用'nditer'在for循环中迭代吗?它似乎效率不高,因为我必须在非常大的数组上运行此函数。

你有什么想法吗?谢谢。

最佳答案

代码

你可以使用:

(A == 0).cumsum()[A > 0]
# array([0, 0, 1, 2, 2, 5])

或:

(~A).cumsum()[A]
# array([0, 0, 1, 2, 2, 5])

如果 A 是一个 bool 数组。

说明

A == 0 是一个 bool 数组,对于每个 0 都为 True:

>>> import numpy as np
>>> A = np.array([1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0])
>>> A == 0
array([False, False, True, False, True, False, False, True, True,
True, False, True, True, True, True], dtype=bool)

您可以使用 cumsum()计算 True 的数量:

>>> (A == 0).cumsum()
array([0, 0, 1, 1, 2, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9])

您只需要 A > 0 的值:

>>> (A == 0).cumsum()[A > 0]
array([0, 0, 1, 2, 2, 5])

完成!

关于python - 如何计算 Numpy 数组中每个零左边的零个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46826184/

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