2016-09-27 5 views
0

たとえば、私は(* 1).field、a(2).field、...を反復的に表示するコマンドウィンドウに(*。)フィールドを入力すると、1 * 30構造のa.fieldを持ちます。私が(:)フィールドを別の変数bに代入しようとしたときに、bはちょうどa(1).fieldです。MATLABは、代入なしで変数の代入とインデックス作成中にコロンマークを異なる方法で扱いますか?

ところで、関数に(:)フィールドを渡すとしたら、Matlabは「入力引数が多すぎます」というエラーを投げます。

どのようなメカニズムがありますか?私の推測では、MATLABの脅威のコロンは割り当て中の最初の要素に相当する、それは本当ですか?

+0

をコロン演算子」は、単にありますこの場合は「すべて」となります。 'a(:)'は 'a' *のすべての要素を意味します。したがって、 'a(:)。field'を使うと、最初のレベルの名前' field'を持つ構造体 'a'の*すべての*要素を渡しています。それは明らかにあなたの機能が取ることができる以上のものです。 – Adriaan

+1

https://www.mathworks.com/help/matlab/matlab_prog/comma-separated-lists.html – AVK

答えて

0

あなたがそうでなければ、MATLABあなたは配列を格納しようとしていることを理解していない、括弧を追加する必要があります。

b = [a(:).field] 

同様の結果を提供別のオプション:

b = horzcat(a(:).field) 
+0

ありがとうございます。だから私はブラケットを使用してmatlabに、私が作成しようとしている変数は数値ではなく配列であることを伝える必要があります。しかし、a(1)フィールド自体がベクトルの場合、割り当てられた変数 'b'は実際にはベクトル(配列)になります。この場合、b = [a(:)フィールド]は1になります* 60ベクター。どのようにして30 * 2 martixを1行の割り当てで得ることができますか? – David

+0

b = vertcat(a(:)フィールド)はそれを行います。本当にありがとう。 – David

関連する問題