1

我正在尝试组织从多个参与者收集的 3D 数据,每个参与者的样本数量不同。每个参与者在实验中都有一个唯一的会话和座位索引。对于每个参与者 i,我有一个由 Ni 图像 ( height* width) 组成的 3D 数组。

我首先尝试创建一个参与者的数据集,但由于参与者在同一维度 ( sampledim) 上有不同的样本,我最终得到了许多 NaN。然后,我切换到一个唯一的 DataArray,其中包含连接在我调用的单个维度上的所有参与者数据depth。然后将该维度与组合和session坐标的多索引坐标相关联:seatsample

<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,seatsampledepth索引中),所以我最终一次又一次地重新索引我的数据。
  • 我发现hvplot在这样的 DataArray 上使用并不是很简单(跳过这里的细节以便于阅读这篇已经很长的帖子)。

有什么我想念的吗?有没有更好的方法来组织我的数据?为了方便起见,我尝试在同一个昏暗上创建多个索引,但没有成功。

4

0 回答 0