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

时间:2018-10-04 08:09:03

标签: python arrays numpy

我正在处理大型(蒙版)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 个答案:

答案 0 :(得分:1)

您可以使用简单的

  out_array = np.arange(in_array.size).reshape(in_array.shape)

答案 1 :(得分:1)

您可以通过[:]选择所有值来修改数组:

A = np.array([[1,2,2],[4,4,6]])

A[:] = np.arange(A.size).reshape(A.shape)

array([[0, 1, 2],
       [3, 4, 5]])