标签: netcdf

如何从时间序列数据中消除季节性?

如何使用存储在 netcdf 文件中的数据从时间序列中删除季节性数据?我想找到一个使用 Linux 的解决方案,同时我使用 Grads 和 Ferret 进行可视化。

多谢!

weather netcdf nco cdo-climate

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

查找 NetCDF 中多个经纬度中心的半径内的值

我有一个 netCDF 文件,其中包含特定时间南半球的多个气旋位置(纬度、经度)和气温。

\n

我想要的是提取距离每个气旋位置中心 10 测地度(约 1110 公里)半径内的温度值 \xe2\x80\x8b\xe2\x80\x8b 。这个想法是确定与每个气旋相关的温度值 \xe2\x80\x8b\xe2\x80\x8b(假设距气旋中心的最大径向距离为 10\xc2\xba),并仅用这些温度绘制一个全局轮廓图价值观。

\n

我在这里搜索了很多,但我只找到了适用于距一个特定纬度中心的距离的代码(例如:如何查找从纬度和经度值的中心位置开始的半径内的值)。

\n

我陷入了如何同时将半正矢公式应用于多个中心的困境。

\n
import xarray as xr\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nd = xr.open_dataset(\'cyc_temp.nc\')\nlat = d[\'lat\']\nlon = d[\'lon\']\ncyc_pos = d[\'id\'][:,:]\ntemp = d[\'temp\'][:,:]\n\n# Haversine formula\n\ndef haversine(lon1, lat1, lon2, lat2):\n    # convert decimal degrees to radians\n    lon1 = np.deg2rad(lon1)\n    lon2 = np.deg2rad(lon2)\n    lat1 = np.deg2rad(lat1)\n    lat2 = np.deg2rad(lat2)\n\n    # haversine formula\n    dlon = lon2 - lon1\n    dlat = lat2 - lat1\n    a = np.sin(dlat/2)**2 …
Run Code Online (Sandbox Code Playgroud)

python matplotlib haversine netcdf python-xarray

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

为什么netcdf文件中的纬度和经度是二维数组?

我有 netCDF 文件,其中包含某个位置的温度数据。数据形状为 1450x900。

我正在我的应用程序中创建搜索功能,以查找具有纬度、经度值的温度数据。

因此,我从 netCDf 文件中提取了纬度和经度坐标数据,但我期望它们是一维数组,而是得到两个坐标形状均为 1450x900 的二维数组。

所以我的问题是:为什么它们是二维数组,而不是 1450 个纬度值和 900 个经度值?1450 纬度值和 900 经度值不是描述整个网格吗?

假设我们有 4x5 的正方形,用于定位网格最右边和最底部点的索引将为 [4, 5]。所以我的 x 索引为 [1, 2, 3, 4],y 索引为:[1, 2, 3, 4, 5]。总共 9 个索引足以定位该网格(由 20 个单元格组成)上的任何点。那么为什么 netcdf 文件中的 lat (x) 和 lon (y) 坐标分别包含 20 个索引(总共 40 个),而不是分别包含 4 个和 5 个索引(总共 9 个)?希望你能明白我困惑的地方。

是否有可能以某种方式映射这些 2D 数组并“降级”到 1450 个纬度值和 900 个经度值?还是像现在这样就可以了?我如何使用这些价值观来实现我的意图?我需要压缩经纬度数组吗?

这是形状:

>>> DS = xarray.open_dataset('file.nc')
>>> DS.tasmin.shape
    (31, 1450, 900)
>>> DS.projection_x_coordinate.shape
    (900,)
>>> DS.projection_y_coordinate.shape
    (1450,)
>>> …
Run Code Online (Sandbox Code Playgroud)

python latitude-longitude coordinates netcdf python-xarray

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

将 Grib 转换为 netcdf4

我从 ECMWF 下载了 Grib 格式的 Era interim 数据。有没有办法将具有多个频段的 grib 文件转换为 netCDF4,同时保持频段为 NETCDF 格式?

我尝试使用 cdo 操作,但输出仅是 grib 文件的第一个区域。

cdo -f nc copy input.grib output.nc
Run Code Online (Sandbox Code Playgroud)

netcdf grib netcdf4 cdo-climate eccodes

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

使用 CDO 计算 netcdf 的月平均降水量和年降水量总和

我正在使用 CRU ts_4.04 数据学习 netCDF 和 CDO。我想计算伦敦的月平均降水量和年降水量总和。我写:

#!/usr/bin/bash
lon=-0.11
lat=51.49
PREFNAME="/myHD/CRU4.04/pre/cru_ts4.04.1901.2019.pre.dat.nc"
OUTFNAME="outfile-"
echo "1970-2000 monthly average and annual sum of precipitations in London"
cdo remapnn,lon=$lon/lat=$lat $PREFNAME               $OUTFNAME"place.nc"
cdo selvar,pre                $OUTFNAME"place.nc"     $OUTFNAME"var.nc"
cdo selyear,1970/2000         $OUTFNAME"var.nc"       $OUTFNAME"years.nc"
cdo ymonmean                  $OUTFNAME"years.nc"     $OUTFNAME"yearsmean.nc"
cdo timcumsum                 $OUTFNAME"yearsmean.nc" $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsmean.nc"
exit
Run Code Online (Sandbox Code Playgroud)

我得到:

MyPC:~/workbench01$ ./gotit2.sh 
1970-2000 monthly average and annual sum of precipitations in London
cdo    remapnn: Nearest neighbor weights from lonlat (720x360) to lonlat (1x1) grid, with source mask (67420)
cdo …
Run Code Online (Sandbox Code Playgroud)

netcdf cdo-climate

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

rioxarray(或xarray)在重新投影并使用to_netcdf保存后将spatial_ref坐标转换为变量?

我有一个“dataarray”,我正在尝试使用 roxarray 重新投影它。但是,当我使用 xarray.to_netcdf 进行重投影后,保存的文件是一个数据集,其中“spatial_ref”坐标转换为变量。我不确定是 xarray 还是 rioxarray.reprojection 导致了这种行为。以下是一些显示问题的代码:

import xarray as xr 
import rioxarray
from pyproj import CRS 

lst = xr.open_dataset("lst.nc") # File which carries the original CRS
luc = xr.open_rasterio("luc.tif") # File with the desired projection system
file_to_reproject = xr.open_dataarray("myfile.nc") # File to reproject

cc_lst = CRS.from_cf(lst.crs.attrs) # Get the CRS 
cc_luc = luc.rio.crs

file_to_reproject = file_to_reproject.rio.write_crs(cc_lst) # write crs 
file_reprojected= file_to_reproject.rio.reproject(cc_luc) #reproject the file

print(file_reprojected)
<xarray.DataArray (season: 4, y: 4343, x: 4172)>
array([[[nan, nan, nan, ..., nan, …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray

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

如何有效地将 NCDF 时间转换为正确的单位

我试图将 netCDF 文件中的时间单位转换为正确的格式,但是,我得到了错误的输出。

我正在使用的数据的时间格式如下:

1 dimensions:
        time  Size:193458   *** is unlimited ***
            units: seconds since 1970-1-1 00:00:00
Run Code Online (Sandbox Code Playgroud)

我使用包中的函数ncdf.tools来提取时间并将其转换为日期以进行时间序列分类,但得到了错误的结果:

convertDateNcdf2R(id_579$dim$time$vals, units="seconds")

  [75] "1846-07-03 05:04:51 UTC"
  [76] "1846-07-03 05:05:01 UTC"
  [77] "1846-07-03 05:05:06 UTC"
  [78] "1846-07-03 05:05:11 UTC"
  [79] "1846-07-03 05:05:16 UTC"
Run Code Online (Sandbox Code Playgroud)

该日期不应超过 1970 年。是否有更好的替代方案?

创建这个的函数是:

convertDateNcdf2R  =  function(
##title<< Convert netCDF time vector to POSIXct R date object
        time.source ##<< numeric vector or netCDF connection: either a number of time units since
                    ##   origin or a netCDF file connection, …
Run Code Online (Sandbox Code Playgroud)

time r netcdf

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

xarray 创建变量属性

我想使用 xarray 创建一个数据集,并希望在创建数据集时向变量添加属性。xarray文档提供了一种添加全局属性的方法。例如如下:

ds = xr.Dataset(
data_vars=dict(
    'temperature'=(["x", "y", "time"], temperature),
    'precipitation'=(["x", "y", "time"], precipitation),
),
coords=dict(
    lon=(["x", "y"], lon),
    lat=(["x", "y"], lat),
    time=time,
    reference_time=reference_time,
),
attrs=dict(description="Weather related data."),)
Run Code Online (Sandbox Code Playgroud)

添加变量属性的一种方法是这样的:

ds['temperature'].attrs = {"units": K, '_FillValue': -999}
Run Code Online (Sandbox Code Playgroud)

但是,在我看来,这更像是更新属性。有没有办法在直接使用创建数据集时直接分配属性xr.Dataset

python netcdf python-xarray

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

Numpy:在3个维度中使用np.mean

我有140个阵列,其尺寸为734 x 1468.我需要在734 x 1468条目中的140个阵列中的平均值,我开始通过嵌套for循环迭代数据,但它太慢了.我试过使用这个np.mean功能

res = np.mean([megadatalist[i].variables['analysed_sst'][0] for i in range(0,140)], axis=2)
Run Code Online (Sandbox Code Playgroud)

res.shape 给出(140,734)

我需要尺寸734,1468的结果

megadatalist 由140个netCDF文件组成.

python numpy mean dimensions netcdf

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

使用netCDF4和python以编程方式列出netCDF文件的所有变量

如何以编程方式列出我使用netCDF4和python读取的netCDF文件的所有变量:

import netCDF4
dset      = netCDF4.Dataset('test.nc')
Run Code Online (Sandbox Code Playgroud)

python netcdf

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