Python xarray загружает определенные точки и переменные файла nc

#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