【发布时间】:2018-12-20 02:38:01
【问题描述】:
我有一个脚本,可以计算由于特定电流分布而导致的空间区域中的磁场。此计算的结果存储在具有坐标的 xarray 中:vec_comp、x、y 和 z。 vec_comp 跨越字符串['x', 'y', 'z'] 以指示磁场的不同分量。
我正在为许多不同的电流配置计算这个磁场(例如,具有不同半径和距感兴趣区域距离的电流回路)。我想将这些磁场对象(xarray)收集到另一个 xarray 中,该 xarray 的坐标指示电流分布的调整参数。所以我会有一个数组,我可以在其中做类似的事情
mag_array.sel(r=0.1, offset=0.5)
这将返回给我为当前分布的那些特定参数计算的 4 维 xarray。
我发现我可以继续向原始 DataArray 添加额外的坐标,以指示不同的当前参数,但是对我来说携带这个可能有很多坐标的对象似乎很笨重。因此需要分层数据结构。
完成这种数据结构的自然方法是什么?
编辑:
我尝试过类似以下的方法。说B1 和B2 是我想合并的两个DataArrays。我尝试过类似的方法:
mag_array = xr.DataArray([B1, B2],
coords=[('r', [0.1, 0.2])])
但是这会产生一个错误,因为我猜 xarray 在创建新数组时试图了解 B1 和 B2 的结构,因此实际上不是期望一个指定的维度(例如 r 在这种情况下)所有 4 个旧维度(vec_comp、x、y、z)的规范加上我通过将两个 xarray 放入一个数组中创建的新维度。
如果我尝试
mag_array = xr.DataArray([B1, B2])
确实会创建一个新数组,但如果我再看看
mag_array[0]
我取回了一个 xarray,但所有旧坐标信息已被删除。
本质上,我可以通过以下方式完成我喜欢的事情:
mag_array = np.zeros(2,2)
mag_array[0,0] = B1
mag_array[0,1] = B2
等等。或遍历事物,然后 mag_array 将具有我想要的行为。问题是它不会随身携带坐标,我必须自己跟踪这些信息。我怎样才能两全其美?一个可以携带我的对象而不关心对象的性质以及通过坐标而不是索引访问数组的能力的数组?
【问题讨论】:
-
您的子结果对于
vec_comp、x、y和z的坐标或大小是否不同?还是一切都对齐了? -
在这种情况下都是对齐的。虽然我很好奇数据对于较大数组的不同条目具有不同形状的可能性。
-
@shoyer 考虑到数据 xarray 都具有相同的结构,您是否知道如何实现这一点?
标签: python data-structures python-xarray