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

Python 如何将值作为索引的函数分配给numpy数组?,python,arrays,performance,numpy,multidimensional-array,Python,Arrays,Performance,Numpy,Multidimensional Array,我只能找到使用坐标元组指定特定值的结果,如 我想给二维数组赋值,作为其坐标的函数。最简单的情况是将每个元素的值设置为它们的第二个索引(例如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, 2

我只能找到使用坐标元组指定特定值的结果,如

我想给二维数组赋值,作为其坐标的函数。最简单的情况是将每个元素的值设置为它们的第二个索引(例如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
>>> 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]]]) 
试试这个:

a=[]
for i in range(4):
    b=[]
    for j in range(4):
        b.append(j)
    a.append(b)

您可以指定一个范围并利用NumPy:

您选择的方法取决于您希望应用的函数。

似乎是实现这一点的正确工具(尤其是如果您同时需要x和y)

从文档中复制的示例:

x_mask = np.zeros((256, 256))
for i in range(256):
    for j in range(256):
        x_mask[i][j] = j
>>> 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]]]) 

…我不想像前面所说的那样使用for循环。您的简单示例很简单。对于更复杂的情况,您应该自己尝试矢量化解决方案,并告诉我们您遇到了什么问题。没有“通用方法”来矢量化操作。如果有,我们就不需要程序员:)。@jpp希望每个位置都有类似lambda的表达式。我想,当我用x/y坐标作为辅助矩阵来计算很多其他东西时,它也同样有效。非常有效。一旦我也有了x/y坐标,就很容易得到欧几里德/曼哈顿距离,谢谢!