在Python 3中为数组添加坐标

时间:2016-12-21 10:12:41

标签: python arrays numpy dataframe

所以我有迭代的图像数据,以便找到其中有有用数据的像素,然后我需要找到这些坐标受条件语句约束,然后将它们放入数组或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值的有用像素。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

  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默认为浮点数。

答案 1 :(得分:1)

您可以简单地使用np.argwhere作为矢量化解决方案 -

pix_coor = np.argwhere(data_int >= sigma3)