2016-12-13 10 views
3

Matlabでは、構造体配列の特定のフィールドに数値ベクトルの複数の値を割り当てたいことがよくあります。Matlabベクトルをコンマで区切って1行に変換する

b = 1:3; 
x(1).a = b(1); 
x(2).a = b(2); 
x(3).a = b(3); 

この割り当てを1行で行う必要があるようですが、2行が私が思いつくことができます。

c = num2cell(b); 
[x.a] = c{:}; 

数値ベクトルをコンマ区切りリストに変換する方法はありますか?私はここにlength(x) == length(b)ことを想定しています

[x.a] = num2csl(b); 

注:私のようなものを探しています。

+1

Iオクターブ構文を好き '[XA = num2cell(B){ :}; ' – rahnema1

+1

@ rahnema1私はいつもMatlabで動作するようにしていました。私はそれがOctaveで実際に働いているのかどうか分かりませんでした。ありがとう。 –

答えて

4

はい、structを使用できます。指定したフィールド名の値としてセル配列を指定すると、MATLABはそのフィールドと同じサイズのstructを作成し、セル配列内の各要素を使用して、結果の配列に対応するstructを設定します。一般に

x = struct('a', num2cell(b)) 

xすでに要素の正確な数存在している場合、there is no way to easily return a comma-separated list from a function

+0

私の構造体 'x'には、上書きしたくない他のフィールドが頻繁にあるので、コンマ区切りのリストが本当に必要ですが、現時点では合理的な方法はないようです。ありがとう! –

+0

2つの行を持つことに本当に害はないことを覚えておくことが重要です。 – Suever

1

これは、機能のみを行うことができる。

x = repmat(struct, 1, 3); 
b = 1:3; 
[x.a] = num2csl(b); 

num2csl.mをを利用する場合、これは動作特別な出力規約varargoutは次のようになります。

function varargout = num2csl(a) 
varargout = num2cell(a); 

一方、xは既に以前にSueverにより指摘したように、このワンライナーは、それを初期化し、存在しない場合:

x = struct('a', num2cell(b)); 
関連する問題