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要求的数据类型!好吧,现在肯定不是他要求的(见他的评论)