在Python 3中向数组添加坐标
所以我有图像数据,我正在迭代,为了找到像素,其中有有用的数据,我需要根据条件语句找到这些坐标,然后将它们放入数组或数据帧中。到目前为止,我掌握的代码是:在Python 3中向数组添加坐标,python,arrays,numpy,dataframe,Python,Arrays,Numpy,Dataframe,所以我有图像数据,我正在迭代,为了找到像素,其中有有用的数据,我需要根据条件语句找到这些坐标,然后将它们放入数组或数据帧中。到目前为止,我掌握的代码是: pix_coor = np.empty((0,2)) for (x,y), value in np.ndenumerate(data_int): if value >= sigma3: pix_coor.append([x,y]) 其中数据只是一个图像数组(129129)。所有的像素值都大于sigma3是有用的,其他的我不
pix_coor = np.empty((0,2))
for (x,y), value in np.ndenumerate(data_int):
if value >= sigma3:
pix_coor.append([x,y])
其中数据只是一个图像数组(129129)。所有的像素值都大于sigma3是有用的,其他的我不需要
创建一个空数组很好,但是当我附加这个数组时,它似乎不起作用,我需要得到一个数组,该数组有两列x和y值作为有用的像素。有什么想法吗?在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默认为浮点。您可以简单地用于向量化解决方案-
pix_coor = np.argwhere(data_int >= sigma3)