np.fabsxr.DataArray在' 上工作正常,但xr.Dataset在 ' 上则不然。
data = xr.DataArray(np.random.randn(2, 3), coords={'x': ['a', 'b']}, dims=('x', 'y'))
ds = xr.Dataset({'foo': data, 'bar': ('x', [1, 2]), 'baz': np.pi})
np.fabs(ds)
TypeError: ufunc 'fabs' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
np.fabs(ds['foo'])
<xarray.DataArray 'foo' (x: 2, y: 3)>
array([[ 0.384305, 0.161676, 0.07573 ],
[ 0.789885, 1.299188, 1.965528]])
Coordinates:
* x (x) <U1 'a' 'b'
Dimensions without …Run Code Online (Sandbox Code Playgroud) 我使用的是winpython 3.6。我有给定区域的 xarray 数据,如下所示:
sea_clt=clt.sel(lat=slice(-13, 31), lon=slice(89,152))
clt_sea_array=sea_clt[:,:,:]
Out[20]:
<xarray.DataArray 'clt' (time: 20075, lat: 23, lon: 25)>
[11543125 values with dtype=float32]
Coordinates:
* lat (lat) float64 -13.0 -11.0 -9.0 -7.0 -5.0 -3.0 -1.0 1.0 3.0 5.0 ...
* lon (lon) float64 91.25 93.75 96.25 98.75 101.2 103.8 106.2 108.8 ...
* time (time) datetime64[ns] 1950-01-01T12:00:00 1950-01-02T12:00:00 ...
Run Code Online (Sandbox Code Playgroud)
网格间距为200km*200km(2.0度*2.0度尺度),每日时间序列变量。现在我想为每个时间步以(50km * 50km或0.5度* 0.5度网格比例)重新网格化这些数据。我尝试使用重塑选项但没有成功。我无法得到任何解决方案。如何使用最近邻法或 IDW 等标准方法来做到这一点?任何帮助,将不胜感激。
我正在处理GLDAS. 时期的数据重新分析1 year。这些文件是.nc4. 我可以打开文件,但我不能groupby给出1 month。我不想手动或通过 for,但我发现确实xarray如此groupby。我的脚本是:
In[16]:import xarray as xr\n\nIn[17]:gldas = xr.open_mfdataset('./GLDAS_2010/*.nc4', chunks=None, concat_dim='time', preprocess=None, engine='netcdf4', lock=None,compat='minimal',coords='minimal',data_vars='minimal')\n\nIn[18]: gldas\nOut[18]: \n<xarray.Dataset>\nDimensions: (bnds: 2, lat: 40, lon: 48, time: 365)\nCoordinates:\n * lat (lat) float32 -34.875 -34.625 -34.375 -34.125 ...\n * lon (lon) float32 -59.875 -59.625 -59.375 -59.125 ...\n * time (time) float64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...\nDimensions without coordinates: bnds\nData variables:\n Albedo_inst (time, lat, …Run Code Online (Sandbox Code Playgroud) 我正在使用 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)。之后,我可以将插值因子与排放数据相乘以获得新的排放输出。
但我对插值方法有困难。有人能给我一些建议吗?
当我尝试使用 xarray 导入 netCDF4 文件时,出现以下错误:
MissingDimensionsError:“名称”超过一维且与其维度之一同名(“时间”、“名称”)。xarray 不允许使用此类变量,因为它们与用于标记尺寸的坐标冲突。
但是,我可以使用 netCDF4 python 库成功导入这些数据,并从中获取我需要的数据。问题是这个方法非常慢,所以我正在寻找更快的方法并想尝试 xarray。这是一个示例文件,以及给我带来问题的代码。
from netCDF4 import Dataset
#import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
#import seaborn as sns
from tkinter import Tk
from tkinter.filedialog import askdirectory
import os
import xarray as xr
#use this function to get a directory name where the files are
def get_dat():
root = Tk()
root.withdraw()
root.focus_force()
root.attributes("-topmost", True) #makes the dialog appear on top
filename = askdirectory() …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.125 度重新网格化到 0.083 度空间尺度。netcdf 包含 224 个纬度和 464 个经度,并且包含一年的每日数据。
我尝试了 xarray 但它产生了这个内存错误:
MemoryError: Unable to allocate 103. GiB for an array with shape (13858233841,) and data type float64
如何使用 python 重新网格化文件?
我有一个 netCDF 文件,其中包含特定时间南半球的多个气旋位置(纬度、经度)和气温。
\n我想要的是提取距离每个气旋位置中心 10 测地度(约 1110 公里)半径内的温度值 \xe2\x80\x8b\xe2\x80\x8b 。这个想法是确定与每个气旋相关的温度值 \xe2\x80\x8b\xe2\x80\x8b(假设距气旋中心的最大径向距离为 10\xc2\xba),并仅用这些温度绘制一个全局轮廓图价值观。
\n我在这里搜索了很多,但我只找到了适用于距一个特定纬度中心的距离的代码(例如:如何查找从纬度和经度值的中心位置开始的半径内的值)。
\n我陷入了如何同时将半正矢公式应用于多个中心的困境。
\nimport 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) 我有 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-xarray ×10
python ×7
netcdf ×6
netcdf4 ×2
python-3.x ×2
coordinates ×1
grouping ×1
haversine ×1
matplotlib ×1
missing-data ×1
numpy ×1
numpy-ufunc ×1
pandas ×1
python-2.7 ×1
scipy ×1