python - 计算 numpy 数组中长度不同的值的连续出现次数

标签 python arrays numpy

假设我在一个 numpy 数组中有一堆数字,我根据返回 bool 数组的条件测试它们:

np.random.seed(3456)
a = np.random.rand(8)
condition = a>0.5

我想用这个 bool 数组计算 True 连续出现的所有长度。例如,如果我有 [True,True,True,False,False,True,True,False,True] 我想返回 [3,2,1].

我可以使用这段代码来做到这一点:

length,count = [],0
for i in range(len(condition)):

    if condition[i]==True:
        count += 1
    elif condition[i]==False and count>0:
        length.append(count)
        count = 0

    if i==len(condition)-1 and count>0:
        length.append(count)

    print length

但是是否已经为此或 python、numpy、scipy 等函数实现了任何功能来计算给定输入在列表或数组中连续出现的长度?

最佳答案

如果您已经有一个 numpy 数组,这可能会更快:

>>> condition = np.array([True,True,True,False,False,True,True,False,True])
>>> np.diff(np.where(np.concatenate(([condition[0]],
                                     condition[:-1] != condition[1:],
                                     [True])))[0])[::2]
array([3, 2, 1])

它检测 block 的开始位置,对第一个和最后一个 block 有一些逻辑,并简单地计算 block 开始之间的差异并丢弃与 False block 对应的长度。

关于python - 计算 numpy 数组中长度不同的值的连续出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342047/

相关文章:

python - 在numpy中获取结果数组的dtype

python - 重新格式化文本文件,以便它可以在 python 中使用 numpy 数组?

python - 生成唯一的编号序列以用作应用引擎数据存储的实体键

python - Matplotlib savefig() over multiple graphs keeps saving the same graph

arrays - Swift 中 Array "Join"函数的用途

php - 我怎样才能展平这种数组格式?

python - 使用多索引创建一个包含列名称的新 csv 文件

python - 为什么人们会用鸡蛋而不是sdist?

python - 在 Django 内联模型管理中,如何用值预填充额外的字段

javascript - 如何用变量定义一个数组,然后用一个数字填充每个数组?