15

PythonでnetCDF4を使用して読んでいる非常に大きなnetCDFファイルがあります

このファイルのサイズ (1200 x 720 x 1440) は、ファイル全体を一度にメモリに入れるには大きすぎるため、一度にすべてを読み取ることはできません。最初の次元は時間を表し、次の 2 次元はそれぞれ緯度と経度を表します。

import netCDF4 
nc_file = netCDF4.Dataset(path_file, 'r', format='NETCDF4')
for yr in years:
    nc_file.variables[variable_name][int(yr), :, :]

しかし、一度に 1 年ずつ読むのは非常に遅いです。以下のユースケースでこれを高速化するにはどうすればよいですか?

- 編集

チャンクサイズは 1

  1. 年の範囲を読み取ることができます: nc_file.variables[変数名][0:100, :, :]

  2. いくつかのユースケースがあります:

    年の年:

    numpy.ma.sum(nc_file.variables[variable_name][int(yr), :, :])
    

# Multiply each year by a 2D array of shape (720 x 1440)
for yr in years:
    numpy.ma.sum(nc_file.variables[variable_name][int(yr), :, :] * arr_2d)

# Add 2 netcdf files together 
for yr in years:
    numpy.ma.sum(nc_file.variables[variable_name][int(yr), :, :] + 
                 nc_file2.variables[variable_name][int(yr), :, :])
4

3 に答える 3

0

これはちょっとハックですが、最も簡単な解決策かもしれません:

ファイルのサブセットをメモリに読み込み、cPickle ( https://docs.python.org/3/library/pickle.html ) で将来使用するためにファイルをディスクに戻します。pickle 化されたデータ構造からデータをロードすると、毎回 netCDF を解析するよりも高速になる可能性があります。

于 2016-02-19T07:18:18.620 に答える