Мне нужно иметь возможность быстро считывать множество переменных netCDF в python (1 переменная на файл). Я обнаружил, что функция Dataset в библиотеке netCDF4 довольно медленная по сравнению с чтением служебных программ на других языках (например, IDL).Эффективное чтение переменной netcdf в python
Мои переменные имеют форму (2600,5200) и тип float. Они мне кажутся не такими большими (filesize = 52Mb).
Вот мой код:
import numpy as np
from netCDF4 import Dataset
import time
file = '20151120-235839.netcdf'
t0=time.time()
openFile = Dataset(file,'r')
raw_data = openFile.variables['MergedReflectivityQCComposite']
data = np.copy(raw_data)
openFile.close()
print time.time-t0
занимает около 3 секунд, чтобы прочитать одну переменную (один файл). Я думаю, что основным замедлением является np.copy. raw_data
- <type 'netCDF4.Variable'>
, при этом копия. Это лучший/самый быстрый способ чтения netCDF в python?
Спасибо.
Сила Numpy является то, что вы можете создать представления в покидающих данных в памяти через метаданные, которые он сохраняет о данных. Таким образом, копия всегда будет медленнее, чем представление, через указатели. Поскольку @JCOidl говорит, что непонятно, почему вы не просто используете raw_data = openFile.variables ['MergedReflectivityQCComposite'] [:] –
Этот простой шаг ускоряет чтение на порядок. Спасибо! Я попытаюсь использовать указатели с помощью Numpy. Знаете ли вы о хорошей ссылке, объясняющей эту концепцию немного больше (n00b здесь)? –
Документы: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views и на SO http://stackoverflow.com/questions/4370745/view-onto- a-numpy-array –