Быстрая замена на месте некоторых значений в массиве numpy

#python #performance #numpy

#python #Производительность #numpy

Вопрос:

Должен быть более быстрый способ замены значений на месте, верно? У меня есть 2D-массив, представляющий сетку высот / батиметрии. Я хочу заменить все, что превышает 0, на NAN, и этот способ очень медленный:

 for x in range(elevation.shape[0]):
    for y in range(elevation.shape[1]):
        if elevation[x,y] > 0:
            elevation[x,y] = numpy.NAN
  

Похоже, что это намного лучший способ!

Ответ №1:

Это будет сделано следующим образом:

 elevation[elevation > 0] = numpy.NAN
  

Смотрите раздел Индексирование с помощью логических массивов в руководстве по NumPy.

Ответ №2:

 np.putmask(elevation, elevation > 0, np.nan)