如何用Python及xarray构建指定三维参数数据集?
用Python xarray实现指定数据集
问题说明
我尝试用Python编写对应参数的数据集,使用xarray库但未写出正确代码。以下是参数对应的集合与数据集内容:
集合定义
- i(产品):
i1, i2, i3, i4, i5, i6, i7, i8, i9, i10 - j(处理单元):
j1, j2, j3 - s(生产站点):
s1, s2, s3
参数表格 v(i,j,s)
| s1 | s2 | s3 | |
|---|---|---|---|
| i1.j1 | 5 | ||
| i2.j1 | 5 | ||
| i3.j1 | 5 | ||
| i4.j1 | 5 | ||
| i5.j2 | 6 | ||
| i6.j2 | 6 | ||
| i7.j2 | 6 | ||
| i8.j2 | 6 | ||
| i9.j3 | 4 | ||
| i10.j3 | 4 |
实现代码
import xarray as xr import numpy as np # 定义各维度的标签集合 products = ['i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9', 'i10'] processing_units = ['j1', 'j2', 'j3'] production_sites = ['s1', 's2', 's3'] # 创建全NaN的3D数组,对应(i,j,s)三个维度的形状 v_data = np.full((len(products), len(processing_units), len(production_sites)), np.nan) # 填充已知参数值 # 产品i1-i4,对应处理单元j1、生产站点s1,值为5 for i_idx in range(4): v_data[i_idx, processing_units.index('j1'), production_sites.index('s1')] = 5 # 产品i5-i8,对应处理单元j2、生产站点s2,值为6 for i_idx in range(4, 8): v_data[i_idx, processing_units.index('j2'), production_sites.index('s2')] = 6 # 产品i9-i10,对应处理单元j3、生产站点s3,值为4 for i_idx in range(8, 10): v_data[i_idx, processing_units.index('j3'), production_sites.index('s3')] = 4 # 构建xarray DataArray v_array = xr.DataArray( data=v_data, dims=['i', 'j', 's'], coords={ 'i': products, 'j': processing_units, 's': production_sites }, name='v' ) # 转为Dataset(如果需要将多个变量整合) dataset = xr.Dataset({'v': v_array}) # 打印验证结果 print(dataset)
验证方式
可以通过索引快速查看指定参数值,比如:
# 查看i1、j1、s1对应的值 print(dataset.v.sel(i='i1', j='j1', s='s1')) # 查看i5、j2、s2对应的值 print(dataset.v.sel(i='i5', j='j2', s='s2'))
内容的提问来源于stack exchange,提问作者senadurgunlu
相关产品推荐
相关产品推荐

