numpy:将值分配给带有索引列表的2d数组 [英] Numpy: assigning values to 2d array with list of indices

查看:283
本文介绍了numpy:将值分配给带有索引列表的2d数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2d的numpy数组(想想灰度图像).我想为该数组的坐标列表分配某些值,例如:

I have 2d numpy array (think greyscale image). I want to assign certain value to a list of coordinates to this array, such that:

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功能来使其更快.以后我可能还会有一个用例,如下所示:

This works, but I feel like I can take advantage of numpy functionality to make it faster. I also might have a use case later to to something like following:

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)

是否有更矢量化的方法?

Is there a more vectorized way of doing that?

推荐答案

我们可以将coords的每一行解压缩为一行,然后将col索引解压缩到img中,然后进行分配.

We can unpack each row of coords as row, col indices for indexing into img and then assign.

现在,由于该问题被标记为:Python 3.x,因此我们可以简单地将其与[*coords.T]一起打开包装,然后分配-

Now, since the question is tagged : Python 3.x, on it we can simply unpack with [*coords.T] and then assign -

img[[*coords.T]] = 255

通常,我们可以使用tuple来解压-

Generically, we can use tuple to unpack -

img[tuple(coords.T)] = 255

我们还可以计算线性指数,然后分配np.put-

We can also compute the linear indices and then assign with np.put -

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

这篇关于numpy:将值分配给带有索引列表的2d数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆