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

用不在数据集中的值替换numpy数组中的所有非唯一值

  •  0
  • user32882  · 技术社区  · 6 年前

    我正在处理大型(掩蔽)2D numpy阵列,这些阵列源自全国范围内分辨率为10到200米的光栅数据集。数组非常大,可以包含数百万个值。

    in_array = numpy.array([[1,2,2],[4,4,6]])
    out_array = uniqify(in_array)
    print(out_array)
    >>>
    numpy.array([[1,2,3],[4,5,6]])
    

    这是一种方法,但我担心它可能会严重损坏大型数据集:

    def uniqify(array):
        count = 0
        for i in range(array.shape[0]):
            for j in range(array.shape[1]):
                array[i][j]= count
                count = count+1
        return array
    
    
    array = np.array([[100,2,3],[4,5,5,],[4,8,7]])
    uniqified = uniqify(array)
    print(uniqified)
    

    我想知道是否有现成的,计算效率高的方法来做到这一点,而不使用嵌套 for

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Amir    6 年前

    你可以用一个简单的

      out_array = np.arange(in_array.size).reshape(in_array.shape)
    
        2
  •  1
  •   jpp    6 年前

    [:] :

    A = np.array([[1,2,2],[4,4,6]])
    
    A[:] = np.arange(A.size).reshape(A.shape)
    
    array([[0, 1, 2],
           [3, 4, 5]])