代码之家  ›  专栏  ›  技术社区  ›  hkchengrex

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

  •  1
  • hkchengrex  · 技术社区  · 7 年前

    我只能找到使用坐标元组来指定特定值的结果,例如 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 回复  |  直到 7 年前
        1
  •  2
  •   jpp    7 年前

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

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

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

        2
  •  2
  •   xdze2    7 年前

    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]]]) 
    
        3
  •  0
  •   Nivedh    7 年前

    试试这个:

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