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