【问题标题】:Quickly calculating centroid of binary numpy array快速计算二进制numpy数组的质心
【发布时间】:2016-12-20 09:19:54
【问题描述】:

我有一个 0 和 1 (512 x 512) 的 numpy 数组。我想计算 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 函数可以并行执行此操作?

【问题讨论】:

  • 你也可以使用np.count_nonzero()代替count变量。

标签: performance python-2.7 numpy vectorization centroid


【解决方案1】:

可以替换两个嵌套循环,得到中心点的坐标,像这样-

x_center, y_center = np.argwhere(array==1).sum(0)/count

【讨论】:

  • 假设数组是图像,反之亦然 y_center, x_center。也可以使用 np.argwhere(.).mean()
【解决方案2】:

【讨论】:

    【解决方案3】:
    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()的二值图像的质心

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多