Ошибка Numpy памяти при маскировании только по определенной оси, несмотря на наличие достаточного объема оперативной памPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка Numpy памяти при маскировании только по определенной оси, несмотря на наличие достаточного объема оперативной пам

Сообщение Anonymous »

У меня большой массив, и я хочу замаскировать определенные значения (установить для них значение nodata). Но у меня возникает ошибка нехватки памяти, несмотря на достаточный объем оперативной памяти.
Ниже я показал пример, воспроизводящий мою ситуацию. Мой массив составляет 14,5 ГБ, а маска составляет ~ 7 ГБ, но у меня для этого выделено 64 ГБ ОЗУ, поэтому я не понимаю, почему это не удается.

Код: Выделить всё

import numpy as np

arr = np.zeros((1, 71829, 101321), dtype='uint16')
arr.nbytes
#14555572218

mask = np.random.randint(2, size=(71829, 101321), dtype='bool')
mask.nbytes
#7277786109

nodata = 0

#this results in OOM error
arr[:, mask] = nodata
Интересно, что если я сделаю следующее, все заработает.

Код: Выделить всё

arr = np.zeros((71829, 101321), dtype='uint16')
arr.nbytes
#14555572218

mask = np.random.randint(2, size=(71829, 101321), dtype='bool')
mask.nbytes
#7277786109

nodata = 0

#this works
arr[mask] = nodata
Но я не могу это использовать. Этот код будет частью библиотечного модуля, который должен будет принимать значение переменной для нулевого измерения.
Я предполагаю, что arr[mask] = nodata изменяет массив на месте, но arr[:, маска] = nodata создает новый массив, но я не знаю, почему это так. Даже если бы это было так, для этого все равно должно хватить места, поскольку общий размер arr и маски составит 22 ГБ, а у меня 64 ГБ ОЗУ.
Я пытался найти это, я нашел это, но я новичок в numpy и не понял объяснения более длинного ответа. Я попробовал подход np.where из другого ответа на этот вопрос, но все равно получаю ошибку OOM.
Любой вклад будет оценен.

Подробнее здесь: https://stackoverflow.com/questions/787 ... g-sufficie
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»