2011-07-29 11 views
1

私がここより助けてくれる人がMATLABの経験が少しでもあれば、私はこのMATLABのことで少し期待していません。MATLABでの逆評価

S50S60S70というように、次元が1x142x192のMATLABの変数一覧があります。私はただ1つの変数にそれらを組み合わせて統計分析を実行したいと思っていました(次元Nx142x192)。

eval変数を使用して文字列を作成すると、逆の作業をすることができますか?

for i = 1:5 
    eval([ 'M' num2str(i) ' = M;' ]); 
end 
+1

私の最初の考えは次のようになります。なぜあなたはとにかく別々の変数でそれらのすべてを置くのですか? 'cube = 0(142,192、N)のようなsomtehingを使うことができます。 k = 1、Nについては、キューブ(:、:、k)= <どこからデータを取得するか>; end' – jpjacobs

+0

オリジナルのデータは36700x142x192で、MatlabのUNIXクラスタ版(メモリ8TB)でも処理できませんでした。私は現時点でデカール統計に興味があったので、1950年、1960年、1970年のスレッショルド・レベルまたは平均レベル(m)に興味がありました。私はこのトリックを将来のために覚えています。 – Padaiwan

答えて

1

私は本当にEVALを使用して好きではないが、ここでは一つの可能​​な解決策がある:

%# evaluates the expression: cat(1,S50,S60,S70) 
S = eval(['cat(1' sprintf(',S%d', (50:10:70)') ')']); 
+0

ありがとう、それは魔法のように動作します!ちょうど簡単な質問、なぜ '1'は '3'ではない、確かに3次元の配列ですか? – Padaiwan

+1

@Padaiwan:あなたの説明から、行列は最初の次元がシングルトンである3Dであり、その最初の次元に沿って連結したいとします。 – Amro

+0

また、EVALがあなたの好みでない場合、あなたの考え方メソッドは何ですか? – Padaiwan