【发布时间】:2014-07-21 02:13:53
【问题描述】:
我花了一些时间研究这个,但很可能错过了一些简单的东西。我有中级 Matlab 知识。
我有一个从实验中保存的数据结构;
1x30 struct array with fields:
pixelStats: [118.6892 3.1370e+003 -0.1418 2.1195 -25.9308 259.3778]
pixelLPStats: [5x2 double]
autoCorrReal: [9x9x5 double]
autoCorrMag: [4-D double]
magMeans: [18x1 double]
cousinMagCorr: [4x4x5 double]
parentMagCorr: [4x4x4 double]
cousinRealCorr: [8x8x5 double]
parentRealCorr: [8x8x4 double]
varianceHPR: 21.5116
每个子字段(“数组”?术语可能不正确,抱歉)的大小不同。我需要对 30 个条目(试验)进行平均,以便保留上述形状,但每个字段中每个单元格的值是 30 个试验的平均值。我还需要方差(我正在尝试计算 Z 分数以查看其他试验是否与该人群显着不同)。
首先,我尝试在 for 循环中执行此操作,在其中获取字段名,然后为每个字段插入并尝试为 30 次试验中的每个元素添加值,尽管此策略不适用于字段具有不同大小的维度(例如,我需要根据当前字段的维度创建不同大小的循环)。
然后我尝试将数据结构转换为单元格数组,它可以工作;
cell_in = struct2cell(s_params_in)
cell_in = 10x1x30 607440 cell
...然后我尝试了一些我在搜索中发现的使用 cellfun 的东西,但老实说,我并不完全确定它是如何工作的。我必须添加 UniformOutput 来处理大小不等的字段。
cellfun( @(cell_in) sum(cell_in(:)), cell_in,'UniformOutput',false)
这对所有 30 次试验的每个“字段”(第一个维度)中的所有值求和,并在其中的元素之间折叠。例如
ans(:,:,30) =
[3.4911e+003]
[ 10.9414]
[2.0854e+009]
[2.6877e+007]
[1.3612e+004]
[2.3328e+006]
[8.4917e+004]
[7.3826e+008]
[8.2038e+003]
[ 22.4030]
我尝试使用我如何调用 cell_in(:) 部分,但无法得到我正在寻找的结果,即一个数组在维度上求和以进行试验,同时保留其他维度。
我也尝试将其转换为矩阵,然后我可以使用类似
sum([data(:)])
并尝试重塑以恢复原始尺寸,尽管这似乎也很困难,我可能必须按字段进行操作并手动输入尺寸。由于尺寸不一致, cell2mat 无论如何都不起作用。
所以现在我知识有限,正在寻求帮助,有人可以解决这个问题吗?
干杯, 亚历克斯
【问题讨论】:
标签: arrays matlab data-structures cells