在Python中:2D numpy数组中

时间:2015-11-18 13:28:51

标签: python arrays numpy scipy ndimage

我正在处理一系列numpy.ndarray由101x101值组成,范围从0.0到1.0。所有数组都如下所示:

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]])

现在,假设我有threshold value=0.2:我怎样才能找到矩阵中值的“区域”,以便在其中超出阈值?在这种情况下,我会寻找值为>=0.2的区域。

特别是,我想:

  1. 计算超过threshold value;
  2. 的区域数量
  3. 确定他们的centers of mass
  4. 我知道我可以通过以下方式计算后者:ndimage.measurements.center_of_mass(),但我没有看到如何将它应用于矩阵的“区域”而不是整个事物。

    修改

    请注意我所指的“地区”有不规则形状。

1 个答案:

答案 0 :(得分:0)

计算高于阈值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)

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