【问题标题】:Adding coordinates to an array in Python 3在 Python 3 中向数组添加坐标
【发布时间】:2017-05-06 17:27:58
【问题描述】:

所以我有图像数据,我正在迭代以找到其中包含有用数据的像素,然后我需要根据条件语句找到这些坐标,然后将它们放入数组或 DataFrame 中。我到目前为止的代码是:

pix_coor = np.empty((0,2))

for (x,y), value in np.ndenumerate(data_int):
  if value >= sigma3:
    pix_coor.append([x,y])

其中 data 只是一个图像数组 (129,129)。所有值大于 sigma3 的像素都是有用的,其他的我不需要。

创建一个空数组可以正常工作,但是当我附加它时它似乎不起作用,我需要最终得到一个数组,其中包含两列 x 和 y 值的有用像素。有什么想法吗?

【问题讨论】:

    标签: python arrays numpy dataframe


    【解决方案1】:

    在 numpy 中,array.append 不是就地操作,而是将整个数组复制到新分配的内存中(大到足以容纳新值),并返回新数组。因此应该这样使用:

      new_arr = arr.append(values)
    

    显然,这不是一种逐个添加元素的有效方式。

    你应该为此使用一个常规的 python 列表。

    或者,使用所有值预先分配 numpy 数组,然后调整它的大小:

     pix_coor = np.empty((data_int.size, 2), int)
     c = 0
     for (x, y), value in np.ndenumerate(data_int):
         if value >= sigma3:
             pix_coor[c] = (x, y)
             c += 1
     numpy.resize(pix_coor, (c, 2))
    

    请注意,我使用了np.empty((data_int.size, 2), int),因为您的坐标是整数,而 numpy 默认为浮点数。

    【讨论】:

      【解决方案2】:

      您可以简单地将np.argwhere 用于矢量化解决方案 -

      pix_coor = np.argwhere(data_int >= sigma3)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2022-08-18
        • 1970-01-01
        • 2018-04-10
        • 2017-03-16
        • 1970-01-01
        相关资源
        最近更新 更多