Заменить все неуникальные значения в массиве numpy на значения, не входящие в набор данных - PullRequest
0 голосов
/ 04 октября 2018

Я имею дело с большими (замаскированными) двумерными массивами, которые берутся из наборов растровых данных по всей стране с разрешением от 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 голосов
/ 04 октября 2018

Вы можете изменить массив на месте, выбрав все значения с помощью [:]:

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

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

array([[0, 1, 2],
       [3, 4, 5]])
0 голосов
/ 04 октября 2018

Вы можете использовать простой

  out_array = np.arange(in_array.size).reshape(in_array.shape)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...