在 Python 中:二维 numpy 数组中值的特定区域的质心
In Python: the center of mass of specific regions of values in a 2D numpy array
我正在处理一系列 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]])
现在,假设我有一个 threshold value=0.2
:我如何定位矩阵中的 "regions" 值,使其超出阈值?在这种情况下,我会寻找值为 >=0.2
.
的区域
我特别想:
- 统计超过
threshold value
的区域数量;
- 确定他们的
centers of mass
.
我知道我可以通过以下方式计算后者:ndimage.measurements.center_of_mass()
,但我看不出它如何应用于矩阵的 "regions" 而不是整个矩阵。
编辑
请注意我所指的 "regions" 形状不规则。
计算所有高于阈值 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)
如果您将低于阈值的值视为缺失值,您可能需要先插入该缺失值。
我正在处理一系列 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]])
现在,假设我有一个 threshold value=0.2
:我如何定位矩阵中的 "regions" 值,使其超出阈值?在这种情况下,我会寻找值为 >=0.2
.
我特别想:
- 统计超过
threshold value
的区域数量; - 确定他们的
centers of mass
.
我知道我可以通过以下方式计算后者:ndimage.measurements.center_of_mass()
,但我看不出它如何应用于矩阵的 "regions" 而不是整个矩阵。
编辑
请注意我所指的 "regions" 形状不规则。
计算所有高于阈值 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)
如果您将低于阈值的值视为缺失值,您可能需要先插入该缺失值。