标签: netcdf

从 netCDF 维度中减去值

如何使用 nco 工具或任何其他 netcdf 工具包从 netCDF 中的某个维度中减去特定值?

\n\n

例如

\n\n
ncdump \xe2\x80\x93v time \xe2\x80\x93t file.nc\n
Run Code Online (Sandbox Code Playgroud)\n\n

给我:

\n\n
time = 10, 11, 12, 13 \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何从时间维度中的每个值中减去 10,以便最终结果为:

\n\n
time = 0, 1, 2, 3 \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

python netcdf nco

2
推荐指数
1
解决办法
382
查看次数

NetCDF 文件中的写入次数

使用 NETCDF4 包时,在 netCDF 文件中写入次数。

dates = []
for iday in range(84):
    dates.append(datetime.datetime(2016, 10, 1) + atetime.timedelta(hours = iday))
times[:] = date2num(dates, units=times.units, calendar = imes.calendar)
# print times[:]
for ii, i in enumerate(times[:]):
    print i, num2date(i, units=times.units), dates[ii]
Run Code Online (Sandbox Code Playgroud)

时机是正确的:

dates = []
for iday in range(84):
    dates.append(datetime.datetime(2016, 10, 1) + atetime.timedelta(hours = iday))
times[:] = date2num(dates, units=times.units, calendar = imes.calendar)
# print times[:]
for ii, i in enumerate(times[:]):
    print i, num2date(i, units=times.units), dates[ii]
Run Code Online (Sandbox Code Playgroud)

但是在读取 netcdf 文件时:

input_file = '/home/lovechang/test.nc' …
Run Code Online (Sandbox Code Playgroud)

python netcdf

2
推荐指数
1
解决办法
7511
查看次数

使用 CDO 将累积变量转换为 netcdf 文件中的时间步值

我有一个 netcdf 文件,网格上有大约 100 个时间步长,其中有一个变量,该变量是在时间步长上累积的。我现在有兴趣计算每个时间步长对变量值的贡献(即连续时间步长的差异)。

目前我使用以下顺序:

  1. 为了将每个时间步提取到我使用的新文件中cdo seltimestep,$i ...
  2. 将每个差异计算到一个新文件中cdo sub $i ${i-1} ...
  3. 并将这些新文件最终合并cdo mergetime ...到一个结果文件中。

在我看来,这非常麻烦并且在性能方面并不理想。由于时间步长,我无法使用 cdo 管道,因此需要同时创建许多文件。

是否有一种更好的解决方案可以使用 cdo (或其他类似 nco/ncl 的东西?)将累积变量转换为时间步值?

python netcdf nco cdo-climate

2
推荐指数
1
解决办法
2829
查看次数

内存使用过多 xarray `to_dataframe()`

我正在使用 xarray 读取一个相当小的 NetCDF 文件 (5.4MB),并希望将其转换为 Pandas 数据帧:

import xarray as xr
f = xr.open_dataset('file.nc')
Run Code Online (Sandbox Code Playgroud)

到目前为止,Python 使用的内存非常少(~75 MB),但是一旦我调用:

f2 = f.to_dataframe()
Run Code Online (Sandbox Code Playgroud)

内存使用量激增(>12 GB)。有谁知道为什么会发生这种情况?我尝试使用to_dask_dataframe(),但这给我带来了 NetCDF 文件中某些数据类型的错误。

我在这里上传了NetCDF文件,由于我无法分发原始数据,所以原始数据被随机数替换。


按照评论中的要求:

In [3]: f
Out[3]: 
<xarray.Dataset>
Dimensions:          (day_in_time_interval: 3652, nv: 2, time: 175296)
Coordinates:
  * time             (time) datetime64[ns] 2001-01-01 2001-01-01T00:30:00 ...
Dimensions without coordinates: day_in_time_interval, nv
Data variables:
    iso_dataset      |S1 ...
    product          |S1 ...
    station_details  |S1 ...
    date             (time) int32 ...
    valid_dates      (day_in_time_interval) int8 ...
    time_bnds        (time, nv) float32 ...
    C020 …
Run Code Online (Sandbox Code Playgroud)

python netcdf pandas python-xarray

2
推荐指数
1
解决办法
2911
查看次数

如何将二维数组从较粗的分辨率插值到较细的分辨率

假设我有一个形状为 的发射数据(21600,43200),它对应于latlon,即

lat = np.arange(21600)*(-0.008333333)+90
lon = np.arange(43200)*0.00833333-180
Run Code Online (Sandbox Code Playgroud)

我还有一个形状为 的缩放因子(720,1440,7),对应于latlonday of week

lat = np.arange(720)*0.25-90 
lon = np.arange(1440)*0.25-180
Run Code Online (Sandbox Code Playgroud)

现在,我想将该因子应用于排放数据,并且我认为我需要将该因子插值到(720,1440)(21600,43200)。之后,我可以将插值因子与排放数据相乘以获得新的排放输出。

但我对插值方法有困难。有人能给我一些建议吗?

numpy scipy netcdf python-xarray

2
推荐指数
1
解决办法
2094
查看次数

如何计算每个网格单元的面积?

我有空间分辨率为 1.25 x 1.25 度(经纬度)的空气温度网格数据。数据覆盖北半球,第一纬度为90度。

我需要计算每个网格单元的面积,我的方法是从纬度带计算。

另一种方法是直接从 netCDF 文件中读取每个网格单元的区域。这在 MATLAB 中可能吗?

这是我尝试过的代码;我不确定这是否正确。

i=1:72;
j=2:73;
R=6371; % Earth's radius in km^2
deltalon=1.25; 
area=(pi/180)*R^2*((sind(latitude(i)) - sind(latitude(j)))*deltalon); % Area of each grid cell in km^2
Run Code Online (Sandbox Code Playgroud)

matlab area latitude-longitude netcdf cdo-climate

2
推荐指数
1
解决办法
2090
查看次数

从 netCDF 文件读取数据时 Missing_value 属性丢失?

我正在从 NCEP/NCAR Reanalysis 1 的 netCDF 文件中读取风分量(u 和 v)数据来进行一些计算。我正在使用 xarray 来读取文件。

在其中一项计算中,我想屏蔽掉低于某个阈值的所有数据,使它们等于 Missing_value 属性。我不想使用 NaN。

但是,当使用 xarray 读取数据时,missing_value 属性(存在于 netCDF 文件中的变量中)不会复制到包含数据的 xarray.DataArray。

我找不到使用 xarray 从 netCDF 文件变量复制此属性的方法。

这是我正在尝试做的事情的一个例子:

import xarray as xr
import numpy as np

DS1 = xr.open_dataset( "u_250_850_2009012600-2900.nc" )
DS2 = xr.open_dataset( "v_250_850_2009012600-2900.nc" )

u850 = DS1.uwnd.sel( time='2009-01-28 00:00', level=850, lat=slice(10,-60), lon=slice(260,340) )
v850 = DS2.vwnd.sel( time='2009-01-28 00:00', level=850, lat=slice(10,-60), lon=slice(260,340) )

vvel850 = np.sqrt( u850*u850 + v850*v850 )

jet850 = vvel850.where( vvel850 >= 12 )
#jet850 = …
Run Code Online (Sandbox Code Playgroud)

python netcdf missing-data python-xarray

2
推荐指数
1
解决办法
1355
查看次数

使用 nco 将 NetCDF 中的经度从 0:360 转换为 -180:180

我有两个 NetCDF 文件,每个文件都用于不同的年份,我想将它们连接起来。它们似乎具有相同的结构,以时间为无限维度,只是其中一个经度的比例为 0:360,而另一个的比例为 -180:180。

这个问题解决了如何使用 R 中的 raster 包处理这个问题,但我想使用 nco。

我找到了用于转换 -180:180-->0:360 的说明(在下面提供),但对语法不够熟悉,无法让我在另一个方向反转说明。

有关我的 NetCDF 文件的详细信息:

netcdf soda3.3.1_1980_2015_sst {
dimensions:
    depth = 1 ;
    latitude = 330 ;
    longitude = 720 ;
    time = UNLIMITED ; // (432 currently)
variables:
    float depth(depth) ;
        depth:long_name = "depth" ;
        depth:units = "m" ;
        depth:axis = "Z" ;
    float latitude(latitude) ;
        latitude:long_name = "latitude" ;
        latitude:units = "degrees_north" ;
        latitude:axis = "Y" ;
    float longitude(longitude) ;
        longitude:long_name = "longitude" ;
        longitude:units …
Run Code Online (Sandbox Code Playgroud)

bash netcdf nco cdo-climate

2
推荐指数
1
解决办法
2014
查看次数

将 netCDF 文件转换为 csv

我正在努力将几个 Berkeley Earth netCDF 文件转换为 CSV 或其他表格格式。我意识到以前曾提出过类似的问题,但我无法应用我遇到的任何解决方案。

例如,这个数据集

  • ncdump从 netCDF 实用程序中似乎不会生成实际的 CSV 文件。我找不到任何关于如何执行此操作的说明。
  • 我尝试使用 将数据加载到pandas数据帧中xarray.to_dataframe(),但我的笔记本无法分配所需的内存。
In [1]: import xarray as xr

In [2]: import pandas as pd

In [3]: nc = xr.open_dataset('Complete_TAVG_Daily_EqualArea.nc')

In [4]: nc
Out[4]:
<xarray.Dataset>
Dimensions:      (map_points: 5498, time: 50769)
Dimensions without coordinates: map_points, time
Data variables:
    longitude    (map_points) float32 ...
    latitude     (map_points) float32 ...
    date_number  (time) float64 ...
    year         (time) float64 ...
    month        (time) float64 ...
    day          (time) float64 ... …
Run Code Online (Sandbox Code Playgroud)

python netcdf pandas

2
推荐指数
1
解决办法
5335
查看次数

在 python 中重新网格 Netcdf 文件

我正在尝试将 NetCDF 文件从 0.125 度重新网格化到 0.083 度空间尺度。netcdf 包含 224 个纬度和 464 个经度,并且包含一年的每日数据。

我尝试了 xarray 但它产生了这个内存错误: MemoryError: Unable to allocate 103. GiB for an array with shape (13858233841,) and data type float64

如何使用 python 重新网格化文件?

python interpolation netcdf python-xarray netcdf4

2
推荐指数
2
解决办法
1万
查看次数