2024-04-26 00:37:01 发布
网友
我有一个带有布尔值的numpy1d数组,看起来像
array_in = np.array([False, True, True, True, False, False, True, True, False])
这个数组有不同的长度。正如您所看到的,有些部分的真值彼此相邻,所以我们有真值组和假值组。我想计算真实群体的数量。就我们的情况而言,我们有
N = 2
我试着用条件做一些循环,但它变得非常混乱和混乱
查找True组数的一种简单方法是计算数组中False、True序列的数量。对于列表理解,将如下所示:
True
False
sum([1 for i in range(1, len(x)) if x[i] and not x[i-1]])
或者,您可以将初始数组转换为'0'和'1'的字符串,并计算'01'出现的次数:
'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组数相同
[0, 1, 1, 1, 0, 0, 2, 2, 0]
查找
True
组数的一种简单方法是计算数组中False
、True
序列的数量。对于列表理解,将如下所示:或者,您可以将初始数组转换为
'0'
和'1'
的字符串,并计算'01'
出现的次数:您可以使用np.diff确定组之间的更改。通过将
False
附加到此差异计算的开始和结束,我们确保正确计算开始和结束处的True
组如果您不想编写循环和条件,您可以采取一种捷径,将其视为连接组件问题
将数组传递到measure.label()函数时,它将该数组中的0值视为“背景”。然后它查看所有非零值,找到连接的区域,并对它们进行编号
例如,上面数组上的标签输出将是
[0, 1, 1, 1, 0, 0, 2, 2, 0]
。当然,对输出执行简单的max会得到最大的组数(这里是2)——这与True
组数相同相关问题 更多 >
编程相关推荐