擅长:python、mysql、java
<p>NetCDF作为文件格式不支持复杂数据。显然,地球科学的用户并不强烈需要保存复杂的值。在</p>
<p>也就是说,您确实可以使用某种特殊约定将complex128数据写入netCDF文件,例如使用自定义复合数据类型。这与h5py使用的方法类似。这确实需要在xarray中实现:pull请求是受欢迎的。在</p>
<p>在当前版本的xarray中,序列化复杂值有两个选项:</p>
<ol>
<li><p>使用<code>engine='h5netcdf'</code>。这使用h5py的约定来编写复杂的数据。不幸的是,这会导致一个无效的netCDF文件<a href="https://github.com/Unidata/netcdf-c/issues/267" rel="nofollow noreferrer">unreadable by netCDF-C</a>。
如果您尝试此操作,应该会看到一条警告消息。在xarray的未来版本中,我们可能需要使用诸如<code>to_hdf5()</code>而不是<code>to_netcdf()</code>这样的专用方法来创建这样的无效文件。</p></li>
<li><p>将数据转换为实部和虚部,并将它们保存为单独的变量。从磁盘读回数据时,将它们组合成复杂的值。选择你认为最合适的临时会议。</p></li>
</ol>
<p>例如</p>
<pre><code>def save_complex(data_array, *args, **kwargs):
ds = xarray.Dataset({'real': data_array.real, 'imag': data_array.imag})
return ds.to_netcdf(*args, **kwargs)
def read_complex(*args, **kwargs):
ds = xarray.open_dataset(*args, **kwargs)
return ds['real'] + ds['imag'] * 1j
</code></pre>