#python #performance #python-xarray #netcat
#python #Производительность #python-xarray #netcat
Вопрос:
У меня есть 3 .nc
файла по 6 Гб каждый. Все они содержат несколько переменных, но меня интересуют только 2, в частности: v
и mid_dates
(массивы 13000 x 330 x 300, где 13000 — ось времени).
У меня есть фрейм данных размером 200×2, столбцы представляют координаты xpoint
и ypoint
200 точек. У .nc
каждого есть 2 массива x
, y
которые являются координатами, представляющими упомянутые выше массивы ( len(x) = 300
, len(y) = 330
). Я использую nc_file.v.sel(x=xpoint,y=ypoint,method='nearest')
в цикле над моим фреймом данных для извлечения значений v из моих 200 точек.
Однако я не могу загрузить все .nc
файлы (кубы данных), потому что ОЗУ моего компьютера недостаточно велико. Есть ли способ загрузить только ячейки my v
и mid_dates
массивы, соответствующие моей точке 200, для каждого из моих .nc
файлов?
Единственный способ, который я нашел, чтобы заставить его работать, был: на каждой итерации в цикле открывайте каждый файл по отдельности, извлекайте соответствующие v
mid_date
значения и, закрывайте файл, загружайте другой и т. Д…. но это действительно медленно.
Комментарии:
1. Вы смотрели
xr.open_dataset
, особенно сparallel=True
флагом? Документы xarray по чтению наборов данных из нескольких файлов предоставляют хороший обзор. Обратите внимание, что дополнительные аргументы ключевого слова передаются в open_dataset для каждого файла, чтобы вы могли передаватьdrop_variables=list_of_vars_to_drop
для исключения ненужных переменных2. Спасибо за рекомендацию, я попробовал несколько вариантов, но поскольку мое измерение даты не монотонно увеличивается, я получаю ошибку ValueError, не позволяющую мне открывать наборы данных. Я пытался использовать функцию open с флагом parallel, но каждый раз это приводило к сбою моего ядра.
3. Обязательно ли использовать эти файлы .nc? Возможно, какой-то другой формат будет более удобным для вас
4. Да, потому что они содержат полезные метаданные и собирают несколько массивов, которые необходимо использовать в целом
5. @Nihilum если вы получаете ошибки, используя open_dataset или open_mfdataset, не стесняйтесь задавать еще один вопрос об этом, включая трассировки 🙂 но это методы, которые я бы рекомендовал для чтения нескольких netCDFs