Numpy:将值分配给具有索引列表的2D数组

qco9c6ql  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(104)

我有2d numpy数组(认为灰度图像)。我想给这个数组的一个坐标列表赋值,这样:

img = np.zeros((5, 5))
coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]]) 

def bad_use_of_numpy(img, coords):
    for i, coord in enumerate(coords):
        img[coord[0], coord[1]] = 255

    return img

bad_use_of_numpy(img, coords)

字符串
这是可行的,但我觉得我可以利用numpy功能来使它更快。我也可能有一个用例,稍后到类似以下内容:

img = np.zeros((5, 5))
coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])
vals = np.array([1, 2, 3, 4])

def bad_use_of_numpy(img, coords, vals):
    for coord in coords:
        img[coord[0], coord[1]] = vals[i]

    return img

 bad_use_of_numpy(img, coords, vals)


有没有更矢量化的方法?

p1tboqfb

p1tboqfb1#

我们可以将coords的每一行解压缩为row,col索引,然后分配到img中。
现在,由于问题已标记:Python 3.x,我们可以简单地用[*coords.T]解包,然后赋值-

img[[*coords.T]] = 255

字符串
一般来说,我们可以使用tuple来解包-

img[tuple(coords.T)] = 255


我们还可以计算线性索引,然后用np.put赋值。

np.put(img, np.ravel_multi_index(coords.T, img.shape), 255)

相关问题