将NumPy数组中的所有非唯一值替换为不在数据集中的值

eimct9ow  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(97)

我正在处理大型(掩码)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循环?

xoshrz7s

xoshrz7s1#

您可以使用一个简单的

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

igetnqfo2#

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

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

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

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

相关问题