1

構造に単純な問題があります。

作成しましょう:

x(1).a(:, :) = magic(2);
x(2).a(:, :) = magic(2)*2;
x(3).a(:, :) = magic(2)*3;

すべてのx-esからa(1、1)をリストする方法は?

私はそれを次のようにしたかった:

x(1, :).a(1,1)

ただし、「このタイプのマルチレベルインデックスに必要なスカラーインデックス」というエラーがあります。

どのようにそれにアプローチするのですか?私はループでそれを行うことができることを知っていますが、それはおそらく最悪の解決策です:)ありがとう!

4

2 に答える 2

2

次の方法でもデータを取得できます。

B = cat(3,x.a);
out = reshape(B(1,1,:),1,[]);

ところで、ループは悪ではありません。場合によっては、ベクトル化されたインデックス作成よりも高速です。両方の方法を試して、次の点で最も適しているものを見つけてください。

  • 速度 - プロファイラーを使用して確認します
  • コードの明瞭さ - コンテキストに依存します。ベクトル化されたコードの方が見栄えが良い場合もあれば、逆の場合もあります。
于 2012-03-18T16:39:40.517 に答える
2

これは、この種のインデックス付けを直接行うことができないため、作成したいクエリの種類である場合に使用するのに最適なデータ構造ではありません。

ただし、機能する 1 つのアプローチを次に示します。

cellfun(@(X) X(1,1), {x.a})

この構文は、「構造体配列」からセル配列に{x.a}変換されます。x次にcellfun、関数をセル配列のマップとして適用するために使用します。無名関数@(X) X(1,1)は 1 つの引数を取りX、 を返しますX(1,1)

于 2012-03-18T13:04:18.447 に答える