0

Matlabの構造を使用して、直感的な方法で結果を整理しています。私の分析は非常に複雑で階層的であるため、これは論理的にはうまく機能します。例: resultObj.multivariate.individual.distributed.raw.alpha10(1).classification(1)。構造の各レベルには、いくつかのフィールドがあります。各alphaフィールドは構造化配列であり、データセットごとにインデックスが付けられclassificationます。また、データに対して実行される相互検証ごとに1つずつ、構造化配列です。

簡単にするために、分類フィールドについて考えてみます。

>> 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この構造を考えると、抽出、保存、そして最終的に計算するためのforループを構築する必要なしに、交差検定の実行(つまりの要素)でdprimeの平均を見つける良い方法はありますか?

私はそれreshape(struct2array(classification.statObj),5,8)がうまくいくことを望んでいたので、行として統計を使用し、列として相互検証を実行するマトリックスを構築できましたが、これは機能しません。classificationさまざまなタイプ(行列、構造、整数)の要素を保持するフィールドがあるため、これらのアイテムを独自の構造に配置しました。

私は自分の成果を完全に再構築することに反対しているわけではありませんが、組織がかなり自己コメントするような方法で行われることを望んでいます。1年後にこの構造に戻って、何をどこですべてを覚えていると言えます。は。

4

2 に答える 2

3

あなたが探しているものかどうかはわかりませんが、私は次のことを思いつきました:

%# create a structure hierarchy similar to yours
%# (I ignore everything before alpha10, and only create a part of it)
alpha10 = struct();
for a=1:5
    alpha10(a).classification = struct();
    for c=1:8
        alpha10(a).classification(c).statObj = struct('dprime',rand());
    end
end

%# matrix of 'dprime' for each alpha across each cross-validation run
st = [alpha10.classification];
st = [st.statObj];
dp = reshape([st.dprime], 8, 5)'    %# result is 5-by-8 matrix

次に、この行列の 2 番目の次元の平均を計算できますdp

于 2012-07-29T21:22:44.270 に答える