我在Matlab中使用结构以直观的方式组织我的结果。我的分析非常复杂且层次分明,所以这在逻辑上运作良好。例如: resultObj.multivariate.individual.distributed.raw.alpha10(1).classification(1)
。该结构的每个级别都有几个字段。每个alpha
字段是一个结构化阵列,为每个数据集编制索引,并且classification
也是一个结构化阵列,每个交叉验证对数据运行一个。Matlab:查询复杂结构
为了简化,考虑分类字段:
>> classification
ans =
1x8 struct array with fields:
bestLambda
bestBetas
scores
statObj
fitObj
在其statObj
具有字段(例如):
dprime: 6.5811
hit: 20
miss: 0
falseAlarms: 0
correctRejections: 30
当然,场具有为每个主题和跨不同的值验证运行。鉴于此结构,是否有一种很好的方法可以找到交叉验证运行(即classification
的元素)上的dprime的均值,而无需构建for循环来提取,存储和最终计算?
我希望reshape(struct2array(classification.statObj),5,8)
可以工作,所以我可以构建一个矩阵的统计作为行和交叉验证作为列运行,但这是行不通的。因为classification
的字段包含各种类型(矩阵,结构,整数)的元素,所以我将这些项目放在它们自己的结构中。
我并不是完全反对重组我的输出,但我希望这样做可以让组织完全自我评论,并且我可以说从现在开始回到这个结构并记住什么和一切都在哪里。
编写一个函数来处理这很容易,但它确实需要循环。我不知道是否有办法强制数据,以便structfun()或struct2array()可以工作,除非我至少循环了'classification'的元素。 – 2012-07-29 21:05:33
你可以发布你的基于循环的函数,以及我们可以使用的最小结构数组例子吗?例如,它不清楚尺寸5和8代表什么 – Amro 2012-07-29 21:09:19
对不起,5是'statObj'中的元素数量,8是'classification'元素的数量。我的函数遍历'classification'的8个元素,并将每个'.statObj.dprime'拉到一个新的向量中,我只是这么说的。简单本身,但你的解决方案更好。 – 2012-07-29 21:40:19