我正在尝试组织从多个参与者收集的 3D 数据,每个参与者的样本数量不同。每个参与者在实验中都有一个唯一的会话和座位索引。对于每个参与者 i,我有一个由 Ni 图像 ( height
* width
) 组成的 3D 数组。
我首先尝试创建一个参与者的数据集,但由于参与者在同一维度 ( sample
dim) 上有不同的样本,我最终得到了许多 NaN。然后,我切换到一个唯一的 DataArray,其中包含连接在我调用的单个维度上的所有参与者数据depth
。然后将该维度与组合和session
坐标的多索引坐标相关联:seat
sample
<xarray.DataArray (depth: 52, height: 4, width: 4)>
array([[[0.92337111, 0.86505447, 0.08541727, 0.74850848],
[0.02336959, 0.0495726 , 0.98745956, 0.58831929],
[0.62128185, 0.7732787 , 0.27716268, 0.83634779],
[0.08146719, 0.35851012, 0.44170263, 0.74338872]],
...
[[0.4365896 , 0.23527988, 0.86891853, 0.94486637],
[0.20884748, 0.81012315, 0.61542411, 0.76706922],
[0.33391262, 0.88955315, 0.25329999, 0.35803887],
[0.49586615, 0.94767265, 0.40868892, 0.42393425]]])
Coordinates:
* height (height) int64 0 1 2 3
* width (width) int64 0 1 2 3
* depth (depth) MultiIndex
- session (depth) int64 0 0 0 0 0 0 0 0 0 0 0 1 1 ... 3 3 3 3 3 3 3 3 3 3 3 3
- seat (depth) int64 0 0 0 0 0 1 1 1 1 1 1 0 0 ... 0 0 0 0 0 1 1 1 1 1 1 1
- sample (depth) int64 0 1 2 3 4 0 1 2 3 4 5 0 1 ... 1 2 3 4 5 0 1 2 3 4 5 6
但是,由于以下几个原因,我发现此解决方案并不真正可用:
- 每次我想执行 a 时,
groupby
我都必须重置索引以使用我想要分组的坐标重新创建一个索引,因为 xarray 不支持在同一昏暗上使用多个 groupby:
da = da.reset_index('depth')
da = da.set_index(depth=['session', 'seat'])
da.groupby('depth').mean()
- 上面代码的结果并不完美,因为它不维护多索引名称:
<xarray.DataArray (depth: 8, height: 4, width: 4)>
array([[[0.47795382, 0.67322777, 0.12946181, 0.48983815],
[0.33895882, 0.46772217, 0.62886196, 0.55970122],
[0.57370573, 0.47272117, 0.31529004, 0.63230245],
[0.63230284, 0.5352105 , 0.65805407, 0.65274841]],
...
[[0.55672404, 0.37963945, 0.57334768, 0.64853806],
[0.46608072, 0.39506509, 0.66339553, 0.71447367],
[0.58989461, 0.66066485, 0.53271228, 0.43036214],
[0.44163921, 0.54990042, 0.4229631 , 0.5941268 ]]])
Coordinates:
* height (height) int64 0 1 2 3
* width (width) int64 0 1 2 3
* depth (depth) MultiIndex
- depth_level_0 (depth) int64 0 0 1 1 2 2 3 3
- depth_level_1 (depth) int64 0 1 0 1 0 1 0 1
- 我
sel
只能在完全索引的数据上使用(即通过使用session
,seat
和sample
在depth
索引中),所以我最终一次又一次地重新索引我的数据。 - 我发现
hvplot
在这样的 DataArray 上使用并不是很简单(跳过这里的细节以便于阅读这篇已经很长的帖子)。
有什么我想念的吗?有没有更好的方法来组织我的数据?为了方便起见,我尝试在同一个昏暗上创建多个索引,但没有成功。