快速/高效地从多个大型NetCDF文件中提取数据
我需要仅针对特定节点的全局网格提取数据,该节点由LAT/LON坐标给出(按5000-10000的顺序提供).数据是液压参数的时间序列,例如波高. 全局数据集很大,因此将其分为许多NETCDF文件.每个NETCDF文件约为5GB,并包含整个全局网格的数据,但仅适用于一个变量(例如,波高)和一年(例如2020年).说我想在某个位置提取6个变量的全日制系列(42年),我需要提取数据表格6x42 = 252 NC文件,每个5GB的大小. 我当前的方法是多年,变量和节点的三重循环.我使用Xarray打开每个NC文件,提取所有必需节点的数据,然后将其存储在字典中.一旦提取了字典中的所有数据,我就会为每个位置创建一个pd.dataframe,我将其存储为泡菜文件.有6个变量和42年的变量,这会导致每个位置的泡菜文件约为7-9 MB(因此实际上不是很大). 如果我有少量位置,我的方法非常好,但是一旦增长到几百个,这种方法就会花费很长时间.我的直觉是这是一个记忆问题(因为所有提取的数据首
12 2024-03-30
编程技术问答社区
xarray和5年平均数来自月度或年度平均数
我需要从月度平均值或年平均时间序列数据计算5年平均数据(不是滚动平均值,而是一个日历年度). 搜索Xarray文档后,我看不到一种简单的方法. 有人有做这种类型的平均方法吗? 谢谢! 解决方案 计算5年平均值的最简单方法是将自定义频率传递给 resample() ,例如, In [24]: ds = xr.Dataset({'x': ('time', np.arange(1000))}, ...: {'time': pd.date_range('2000-01', freq='1MS', periods=1000)}) In [28]: ds.resample('5AS', dim='time') Out[28]: Dimensions: (time: 17) Coordinates: * time (time) datetime64[ns] 2000-01-01 2005-01
14 2024-03-21
编程技术问答社区
查找数据数组中与二维坐标相关的最大值坐标
我有一个数据阵列,其中包含用于纬度和经度的多维坐标(y,x). Xarray与此数据的本地合作非常好,并且可以让我做da.max()之类的事情并收回值.但是,似乎找到与Max相关的坐标可能并不琐碎(或者我可能缺少某些东西). 这是我的数据阵列的结构: xarray.DataArray 'Power' (y:1500, x:2500) array([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]],
4 2024-03-06
编程技术问答社区
分块写入xarray多索引数据
我正在尝试有效重组大型多维数据集.假设我随着时间的推移有许多远程感知的图像,许多带有坐标的频段x y,用于像素的位置,图像获取时间的时间以及收集的不同数据的频段. 在我的用例中,假设Xarray坐标长度约为x(3000),y(3000),时间(10),带有浮点数据的频段(40).因此100GB+数据. 我一直在尝试从 a>,但我在将其转换为这种情况时遇到了麻烦. 小数据集示例 注意:实际数据比此示例大得多. import numpy as np import dask.array as da import xarray as xr nrows = 100 ncols = 200 row_chunks = 50 col_chunks = 50 data = da.random.random(size=(1, nrows, ncols), chunks=(1, row_chunks, col_chunks)) def create_band(data, x
14 2024-03-05
编程技术问答社区
如何使用Python xarray的多维坐标进行数据子集?
我有一个使用多维坐标的NetCDF文件.我的Xarray数据集看起来像这个 Dimensions: (Time: 48, bottom_top: 50, bottom_top_stag: 51, soil_layers_stag: 4, south_north: 1015, south_north_stag: 1016, west_east: 1359, west_east_stag: 1360) Coordinates: XLAT (Time, south_north, west_east) float32 18.1363 18.1456 ... XLAT_U (Time, south_north, west_east_stag) float32 18.1316 ... XLAT_V (Time, south_north_stag, west_east)
6 2024-03-05
编程技术问答社区
如何使用scipy.interpolate.interpn函数与xarray(3d),来填补nan的空白?当前错误 [维度0中的点必须是严格意义上的升序]。
我有点沮丧,因为我找不到解决问题的解决方案,这似乎很容易与包装Gapfill一起使用,但是在Python中,这更加困难. 遇到问题:我有一个Xarray(3D),其尺寸纬度,经度和时间.我想要的是在每个光栅/数组中插值NAN值(由云和其他扭曲引起). NAN值形成块(由于云),有时相对较大.我的想法是不仅要与每个时间步的相邻像素插值,还要与时间到之前的时间步长(假设是在几天前和几天之后的几天,地面上的值相似,因为土地覆盖率没有那么快地变化).我的目的是随着时间的推移进行线性插值,以相同的像素位置进行. (在我不确定如何在Interpn函数中定义的时间段和之后有多少个时间段?) 我找到了不同的选择来做到这一点,但是尚未工作.我发现的最有前途的方法是来自带有interplate.interpn函数的软件包.此函数使用numpy数组而不是Xarray.我的尝试: #change from xarray to numpy my array_np = my array.to_n
32 2024-01-08
编程技术问答社区
如何使用Iris模块绘制大气的垂直剖面和地形图?
我的NETCDF在型号水平下具有风速.在同一NETCDF上,我具有每个模型级别的高度.我将NETCDF转换为立方体,因此每个级别的高度成为辅助坐标.我想绘制一个横截面(经度X经度),并希望模型级别遵循地形.我尝试使用IRIS模块文档示例(由于我已经具有相对于海平面的每个级别的高度,因此我只需要将其切成垂直的部分和情节.我试图按照文档示例进行返回错误:valueerror:形状不匹配:无法广播到单个形状 的对象 bellow是xarray.dataset: Dimensions: (latitude: 49, level: 21, longitude: 49) Coordinates: * longitude (longitude) float32 -52.0 -51.75 -51.5 ... -40.5 -40.25 -40.0 * latitude (latitude) float32 -15.0 -15.25 -15.5
26 2023-11-20
编程技术问答社区
如何使用apply_ufunc和numpy.digitize对xarray.DataArray的每个图像沿时间维度进行处理?
为了清楚起见,我已经大大提出了我早期的问题.根据瑞安在单独的频道上的建议,numpy.digitize外观是我目标的正确工具. 我有xarray.dataarray的形状x,y和时间.我试图弄清楚我应该向apply_ufunc函数的'input_core_dims'和'output_core_dims'参数提供什么值,以便将numpy.digitize应用于时间序列中的每个图像. 中的每个图像. 直觉,我希望输出尺寸为['time','x','y'].我认为输入核心尺寸应为x和y,因为我想沿时间维度广播numpy.digitize函数.但是,这行不通.我通过应用numpy.对我的时间序列中的第一个numpy阵列进行正确的结果: [84] blues dask.array
36 2023-10-21
编程技术问答社区
将每天的时间序列加到每月的时间序列中,并设定一个NaN值的阈值
i从1979年1月1日至2005年12月31日有一个3D时间序列数据矩阵.矩阵目前为9862x360x720(每日降雨x 0.5°纬度x 0.5°经度).我想将每日降雨量列为每月降雨量(总计324个月),同时还为NAN值设定了一个门槛. 换句话说,如果特定的LAT/LON网格单元的每日值超过10个NAN值,我想将每月的求和单元标记为NAN.如果网格单元的每日NAN值少于10个,我想将其剩余的非NAN每日值总结,并将其用作月度值. 我使用Xarray库的"重新示例"函数成功了,但是我找不到一种设定NAN值阈值的方法.我阅读的所有内容都说使用总和或nansum函数,但是我找不到通过其中任何一个功能设置NAN阈值的方法.我目前对任何方法开放(xarray或其他方式). import netCDF4 import numpy as np import xarray as xr import pandas as pd f = netCDF4.Dataset("daily_dat
18 2023-10-05
编程技术问答社区
根据多个坐标对 xarray.Dataset 进行子集设置
说我有一个xarray.Dataset在使用xarray.open_dataset(..., decode_times=False)中加载的对象,在打印时看起来像这样: Dimensions: (bnds: 2, lat: 15, lon: 34, plev: 8, time: 3650) Coordinates: * time (time) float64 3.322e+04 3.322e+04 3.322e+04 3.322e+04 ... * plev (plev) float64 1e+05 8.5e+04 7e+04 5e+04 2.5e+04 1e+04 5e+03 ... * lat (lat) float64 40.46 43.25 46.04 48.84 51.63 54.42 57.21 60.0 ... * lon (lon) float64 216.6
36 2023-10-05
编程技术问答社区
用坐标因变量分割 xarray 数据集
我在Python3中构建了一个带有坐标(time, levels)的Xarray数据集,以识别观测一天的所有云底座和云顶部.变量levels是可以在给定时间识别的云碱基/顶部的维度.它每次存储云基库/最高高度值. 现在,我想选择位于时间变化的给定高度范围内的所有云库和顶部.高度范围通过阵列bottom_mod和top_mod标识.这些阵列具有time维度,并包含要选择的高度范围的边缘. Xarray数据集为cloudStandard_mod_reshaped: Dimensions: (levels: 8, time: 9600) Coordinates: * levels (levels) int64 0 1 2 3 4 5 6 7 * time (time) datetime64[ns] 2013-04-14 ... 2013-04-14T23:59:51 Data variables: cloudTop (ti
84 2023-09-04
编程技术问答社区
从一个二维数组中提取基于大量xy点的内插值
我有一个相当大的1000 x 4000 Pixel xr.DataArray从 opendatacube QUERY QUERY和A xy点值的大集合(> 200,000). 我需要对数组进行采样以返回每个xy点下的值,然后返回插值值(例如,如果该点在a 0和a 0和a 1.0像素之间降落,则值返回的值应该是0.5). xr.interp让我很容易地采样插值值,但是它返回了所有x和y值的每个组合的巨大矩阵,而不仅仅是每个xy点本身的值.我已经尝试使用np.diagonal仅提取xy点值,但这很慢,很快就会遇到内存问题,并且觉得效率低下,因为我仍然需要等待通过xr.interp插值的每种值组合. 可重复的示例 (仅使用10,000个样品点(理想情况下,我需要可以扩展到> 200,000或更多的东西): # Create sample array width, height = 1000, 4000 val_array = xr.DataArray(data=np.r
10 2023-08-22
编程技术问答社区
TypeError:无法解开非足够的int objec
在运行代码之后,如何解决此错误.我正在使用下面的函数,并在其上实现了链路循环,但最终会出现以下错误. for循环在某个点上工作并悬挂. def get_grps(s, thresh=-1, Nmin=3): """ Nmin : int > 0 Min number of consecutive values below threshold. """ m = np.logical_and.reduce([s.shift(-i).le(thresh) for i in range(Nmin)]) if Nmin > 1: m = pd.Series(m, index=s.index).replace({False: np.NaN}).ffill(limit=Nmin - 1).fillna(False) else: m = pd.Series(m, index=s.index) # Fo
10 2023-08-21
编程技术问答社区
如何将线性回归应用于包含NaN的大型多维数组中的每个像素?
i具有一个自变量值(x_array)的1D数组,该数组与三个空间数据阵列中的时间步中匹配具有多个时步(y_array)的空间数据.我的实际数据要大得多:300多个时间段,最多3000 * 3000像素: import numpy as np from scipy.stats import linregress # Independent variable: four time-steps of 1-dimensional data x_array = np.array([0.5, 0.2, 0.4, 0.4]) # Dependent variable: four time-steps of 3x3 spatial data y_array = np.array([[[-0.2, -0.2, -0.3], [-0.3, -0.2, -0.3], [-0.3, -0.4,
34 2023-08-21
编程技术问答社区
如何修复涉及 xarray 的 netcdf 文件中 Metpy 数据的属性错误
我遇到了这个错误: AttributeError: 'Dataset' object has no attribute 'metpy' 当我运行代码时.特别是: import Scientific.IO.NetCDF as S import cartopy.crs as ccrs import cartopy.feature as cfeature import matplotlib.pyplot as plt import xarray as xr import metpy # Any import of metpy will activate the accessors import metpy.calc as mpcalc #from metpy.testing import get_test_data from metpy.units import units # Open the netCDF file as a xarray Datase # datad
18 2023-07-25
编程技术问答社区
使用 cfgrib 引擎将带有不同变量的文件组合在一起的 Xarray mfdataset
我有一个文件夹,其中包含.grib2扩展程序中的几个文件,其中一些文件夹具有TCC变量(云封面),而其他则没有.我想在一个带有此变量的单个数组中打开所有文件,但会出现错误.我只能打开一次具有TCC变量的单个文件.如何编辑上述代码以仅打开具有TCC变量和连接的文件? #!/usr/bin/env python # coding: utf-8 # In[2]: import os, sys import xarray as xr import pygrib import pandas as pd import windpowerlib import numpy as np from datetime import datetime, timedelta import datetime import warnings warnings.filterwarnings('ignore') import metpy import metpy.calc as mpcalc from m
12 2023-07-25
编程技术问答社区
使用 xarray interpreject 重现数据数组?
我已经对 Interp功能我真的无法理解它.我认为这是一个重新投影,但实际上并不适合真实的示例. 他们的某人是否可以通过在Webmercator基准上重新投射此数据集来理解它? 类似示例: import xarray as xr from pyproj import Transformer ds = xr.tutorial.open_dataset("air_temperature").isel(time=0) fig, axes = plt.subplots(ncols=2, figsize=(10, 4)) lon, lat = np.meshgrid(ds.lon, ds.lat) shp = lon.shape # reproject the grid gcs_to_3857 = Transformer.from_crs(4326, 3857, always_xy=True) x, y = gcs_to_3857.transform(lon.ravel(), lat
24 2023-07-25
编程技术问答社区
如何从两个 xarray 时间序列数据集中删除不匹配的时间序列
我有两个具有匹配和无与伦比的时间序列的Xarray数据集.我想从数据集2中删除与数据集1的时间序列相匹配的时间序列. ds1 Dimensions: (time: 149, x: 311, y: 266) Coordinates: * y (y) float64 -3.256e+06 -3.256e+06 ... -3.263e+06 -3.263e+06 spatial_ref int32 3577 * time (time) datetime64[ns] 2016-01-01T00:09:15.704000 ... 2020-12... * x (x) float64 1.913e+06 1.913e+06 1.913e+06 ... 1.92e+06 1.92e+06 Data varia
14 2023-07-25
编程技术问答社区
xarray 沿切分维度丢弃元素
我正在阅读使用Xarray的NetCDF(时间,级别,LAT,LON)文件.我选择两个切片,而不是相同尺寸的水平. 我想知道什么时候添加两个文件. 结果文件没有给出正确的尺寸. slice1->(72, 22 ,41,36) slice2->(72, 22 ,41,36) 结果 - >(72, 21 ,41,36) 怎么了? 在这里我正在使用的代码 import xarray as xr fname = "DJF_uvwq_lev_monhourly_2017.nc" ds = xr.open_dataset(fname) u = ds['u'] level = ds['level'] a = u.isel(level=slice(0, len(plev)-1)) b = u.isel(level=slice(1, len(plev))) fluxInterp
40 2023-07-25
编程技术问答社区
如何将 csv 中的数据重塑为结构化格式?
我有一些来自计算流体动力学模拟生成的.CSV文件.它们包含空间中给定点处的速度,压力,密度等的值.对于每个点,其坐标和该点的字段值都在CSV文件中的一行打印.对于x值1,2,3,y值为4,5,6的2D网格,数据以下列方式排列: X Y (field variables) 1 4 : 2 4 : 3 4 : 1 5 : 2 5 : 3 5 : 1 6 : 2 6 : 3 6 : 我们从最低的y值开始,循环从所有x值中循环,然后转到下一个y值并重复. 我想做的就是将这些数据放入结构化格式中.即,我想将数据放入使用X和Y值作为坐标轴的Xarray数据集中,或将值放入适当形状的Numpy ndarray中(在这种情况下为3x3.).我可以将文件加载到PANDAS DataFrame中,然后使用for for loops重组数据,但是对
54 2023-07-25
编程技术问答社区