快速计算二进制numpy数组的质心
Quickly calculating centroid of binary numpy array
我有一个 0 和 1 的 numpy 数组 (512 x 512)。我想计算 1 形状的 centroid(它们都连接在数组中间的一个圆形斑点中)。
for i in xrange(len(array[:,0])):
for j in xrange(len(array[0,:])):
if array[i,j] == 1:
x_center += i
y_center += j
count = (aorta == 1).sum()
x_center /= count
y_center /= count
有什么方法可以加快我上面的计算速度吗?我可以使用 numpy.where() 什么的吗?是否有任何 python 函数可以并行执行此操作?
你可以替换两个嵌套循环来获取中心点的坐标,像这样-
x_center, y_center = np.argwhere(array==1).sum(0)/count
import numpy as np
x_c = 0
y_c = 0
area = array.sum()
it = np.nditer(array, flags=['multi_index'])
for i in it:
x_c = i * it.multi_index[1] + x_c
y_c = i * it.multi_index[0] + y_c
centroid = int(x_c/area), int(y_c/area)
那应该是使用 numpy.nditer()
的二值图像的质心
我有一个 0 和 1 的 numpy 数组 (512 x 512)。我想计算 1 形状的 centroid(它们都连接在数组中间的一个圆形斑点中)。
for i in xrange(len(array[:,0])):
for j in xrange(len(array[0,:])):
if array[i,j] == 1:
x_center += i
y_center += j
count = (aorta == 1).sum()
x_center /= count
y_center /= count
有什么方法可以加快我上面的计算速度吗?我可以使用 numpy.where() 什么的吗?是否有任何 python 函数可以并行执行此操作?
你可以替换两个嵌套循环来获取中心点的坐标,像这样-
x_center, y_center = np.argwhere(array==1).sum(0)/count
import numpy as np
x_c = 0
y_c = 0
area = array.sum()
it = np.nditer(array, flags=['multi_index'])
for i in it:
x_c = i * it.multi_index[1] + x_c
y_c = i * it.multi_index[0] + y_c
centroid = int(x_c/area), int(y_c/area)
那应该是使用 numpy.nditer()