我有一个466 x 700 numpy.ndarry
。对于466 x 700 ndarray
中的每个ndarray
,我想按索引删除元素。这是到目前为止:
normalized_img = numpy.atleast_3d(img).astype(numpy.float) / 255.
for x, y in seam:
numpy.delete(normalized_img[y], x)
seam
由坐标元组(x, y)
组成
img
是一个466 x 700 ndarray dtype=uint8
我想从(x, y)
删除normalized_img
。我该怎么办?使用pdb.set_trace()
,即使在我遍历所有seam
之后,我仍然可以看到它仍然是466 x 700。 seam
的长度为466.我在迭代所有seam
后期待466 x 699。
seam
的示例:(13,0), (12,1), (11,2), (10,3), ...
等
我也尝试过:
normalized_img = numpy.atleast_3d(img).astype(numpy.float) / 255.
for x, y in seam:
normalized_img[y] = numpy.delete(normalized_img[y], x)
但是我收到了这个错误:
Traceback (most recent call last):
File "seam_carver.py", line 118, in <module>
sys.exit(main(sys.argv))
File "seam_carver.py", line 114, in main
sc = SeamCarver(image, int(width), int(height))
File "seam_carver.py", line 29, in __init__
self.seam_carve()
File "seam_carver.py", line 79, in seam_carve
normalized_img[y] = numpy.delete(normalized_img[y], x)
ValueError: could not broadcast input array from shape (2099) into shape (700,3)
我认为这是由于形状不匹配,但我不确定如何解决这个问题。
答案 0 :(得分:2)
我无法轻易地重现您的问题,但是documentation表示numpy.delete会返回:
删除了obj指定的元素的arr副本。注意 删除不会就地发生。如果axis为None,则out为flating 阵列。
表示您的更改不适用于数组本身,而是适用于其副本,并且需要执行其他步骤才能修改normalized_img
。
这假设您要将每一行修剪一列(如果最终的数组大小应该减少一列,那么这是您所期望的那样?)
tr_sz =(normalized_img.shape[0],normalized_img.shape[1]-1)
temp = np.zeros(tr_sz)
for x, y in seam:
temp[y] = np.delete(normalized_img[y], x)
normalized_img = temp