Python中:2D numpy数组中特定值区域的重心

Python中:2D numpy数组中特定值区域的重心,python,arrays,numpy,scipy,ndimage,Python,Arrays,Numpy,Scipy,Ndimage,我正在使用一系列的numpy.ndarray,由0.0到1.0的101x101值组成。所有阵列如下所示: array([[ 0.216, 0.24 , 0.244, ..., 0.679, 0.684, 0.707], [ 0.23 , 0.229, 0.238, ..., 0.675, 0.676, 0.695], [ 0.221, 0.238, 0.24 , ..., 0.669, 0.677, 0.684], ...,

我正在使用一系列的
numpy.ndarray
,由0.0到1.0的101x101值组成。所有阵列如下所示:

array([[ 0.216,  0.24 ,  0.244, ...,  0.679,  0.684,  0.707],
       [ 0.23 ,  0.229,  0.238, ...,  0.675,  0.676,  0.695],
       [ 0.221,  0.238,  0.24 , ...,  0.669,  0.677,  0.684],
       ..., 
       [ 0.937,  0.925,  0.923, ...,  0.768,  0.754,  0.752],
       [ 0.937,  0.929,  0.923, ...,  0.737,  0.735,  0.741],
       [ 0.934,  0.932,  0.929, ...,  0.72 ,  0.717,  0.728]])
现在,假设我有一个
阈值=0.2
:我如何在矩阵中定位值的“区域”,使其超过阈值?在本例中,我将查找值为
=0.2
的区域

我特别想:

  • 计算超过
    阈值的区域数
  • 确定它们的
    重心
  • 我知道我可以通过:
    ndimage.measurements.center_of u mass()
    计算后者,但我看不出它如何仅应用于矩阵的“区域”,而不是整个矩阵

    编辑


    请考虑所指的“区域”形状不规则。

    < P>计数阈值以上的所有值>代码> THR=0.2 < /代码>可通过:

    a = np.random.random(size=(100, 100))
    above_thr = len(a[a > thr])
    print above_thr
    
    对于质心,这实际上取决于是否要放弃所有低于阈值的值,并使用沿

    a[a < thr] = 0
    ndimage.measurements.center_of_mass(a)
    
    a[a

    如果将低于阈值的值视为缺失值,则可能需要先插值该缺失值。

    好吧,我只能使用函数
    ndimage.measurements.center\u of\u mass()
    定位整个矩阵的重心。但是,这同样适用于整个矩阵,而不是满足我的条件的部分…我对你前面问题的回答已经说明了如何做到这一点-你需要传递一个索引向量作为第三个参数来指定要处理的标签。请注意,该向量需要从1开始,而不是从0开始,因为不属于上述任何阈值区域的所有位置都会被分配一个标签0。什么是“区域”?每个细胞?还是一组相连的电池?是的,一组电池。它们可能没有连接,因为一个区域也可以由一个单元格组成。请记住,如果数组表示某个“映射”,那么您的解决方案就不会区分组,它只会得到一个巨大的、不一致的组,这肯定不是OP要求的数据类型!好吧,现在肯定不是他要求的(见他的评论)