如何计算numpy 1d数组中具有特定值的组数?

2024-04-26 00:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有布尔值的numpy1d数组,看起来像

array_in = np.array([False, True, True, True, False, False, True, True, False])

这个数组有不同的长度。正如您所看到的,有些部分的真值彼此相邻,所以我们有真值组和假值组。我想计算真实群体的数量。就我们的情况而言,我们有

N = 2

我试着用条件做一些循环,但它变得非常混乱和混乱


Tags: infalsetrue数量np情况数组条件
3条回答

查找True组数的一种简单方法是计算数组中FalseTrue序列的数量。对于列表理解,将如下所示:

sum([1 for i in range(1, len(x)) if x[i] and not x[i-1]])

或者,您可以将初始数组转换为'0''1'的字符串,并计算'01'出现的次数:

''.join([str(int(k)) for k in x]).count('01')

您可以使用np.diff确定组之间的更改。通过将False附加到此差异计算的开始和结束,我们确保正确计算开始和结束处的True

import numpy as np

array_in = np.array([False, True, True, True, False, False, True, True, False, True, False, True])

true_groups = np.sum(np.diff(array_in, prepend=False, append=False))//2

#print(true_groups)
>>>4

如果您不想编写循环和条件,您可以采取一种捷径,将其视为连接组件问题

import numpy as np
from skimage import measure

array_in = np.array([False, True, True, True, False, False, True, True, False])
N = max(measure.label(array_in))

将数组传递到measure.label()函数时,它将该数组中的0值视为“背景”。然后它查看所有非零值,找到连接的区域,并对它们进行编号

例如,上面数组上的标签输出将是[0, 1, 1, 1, 0, 0, 2, 2, 0]。当然,对输出执行简单的max会得到最大的组数(这里是2)——这与True组数相同

相关问题 更多 >