如何使用 nco 工具或任何其他 netcdf 工具包从 netCDF 中的某个维度中减去特定值?
\n\n例如
\n\nncdump \xe2\x80\x93v time \xe2\x80\x93t file.nc\nRun Code Online (Sandbox Code Playgroud)\n\n给我:
\n\ntime = 10, 11, 12, 13 \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n如何从时间维度中的每个值中减去 10,以便最终结果为:
\n\ntime = 0, 1, 2, 3 \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n 使用 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) 我有一个 netcdf 文件,网格上有大约 100 个时间步长,其中有一个变量,该变量是在时间步长上累积的。我现在有兴趣计算每个时间步长对变量值的贡献(即连续时间步长的差异)。
目前我使用以下顺序:
cdo seltimestep,$i ...,cdo sub $i ${i-1} ... cdo mergetime ...到一个结果文件中。在我看来,这非常麻烦并且在性能方面并不理想。由于时间步长,我无法使用 cdo 管道,因此需要同时创建许多文件。
是否有一种更好的解决方案可以使用 cdo (或其他类似 nco/ncl 的东西?)将累积变量转换为时间步值?
我正在使用 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) 假设我有一个形状为 的发射数据(21600,43200),它对应于lat和lon,即
lat = np.arange(21600)*(-0.008333333)+90
lon = np.arange(43200)*0.00833333-180
Run Code Online (Sandbox Code Playgroud)
我还有一个形状为 的缩放因子(720,1440,7),对应于lat、lon、day 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)。之后,我可以将插值因子与排放数据相乘以获得新的排放输出。
但我对插值方法有困难。有人能给我一些建议吗?
我有空间分辨率为 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) 我正在从 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) 我有两个 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) 我正在努力将几个 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) 我正在尝试将 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 重新网格化文件?