如何将值分配给numpy数组作为索引的函数?

时间:2018-07-27 09:18:15

标签: python arrays performance numpy multidimensional-array

我只能找到使用元组坐标分配某些值的结果,例如this one

我想根据其坐标将值分配给二维数组。最简单的情况是将每个元素的值设置为其第二个索引(例如x坐标)。这样,

x[0][0] = 0
x[1][0] = 0
...
x[2][0] = 0
x[0][1] = 1
x[0][2] = 2
...

更复杂的情况是将这些值设置为到特定点(x, y)的欧几里得距离。

我当前的解决方案是使用for循环,这肯定是无效的。向量化的实现会很好。

我当前的实现方式:

x_mask = np.zeros((256, 256))
for i in range(256):
    for j in range(256):
        x_mask[i][j] = j

3 个答案:

答案 0 :(得分:2)

您可以分配范围并利用NumPy broadcasting

A = np.zeros((256, 256))
A[:] = range(A.shape[1])
# or A[:] = np.arange(A.shape[1])

您选择的方法将取决于您希望应用的功能。

答案 1 :(得分:2)

numpy.mgrid似乎是解决此问题的正确工具(特别是如果您同时需要x和y)。

示例摘自文档:

>>> np.mgrid[0:5,0:5]
array([[[0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4]],
       [[0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4]]]) 

答案 2 :(得分:0)

尝试一下:

: dep(std::move(dep))