我正在处理大型(蒙版)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
循环的情况下做到这一点?
谢谢
答案 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]])