、私たちは、私が望んで配列フィールドの構造体を直接作成できますか? MATLABで
struct('a',1:4)
それは構造体の配列を作成しますが...
s = struct('a',[]);
s.a = 1:4;
我々は、単一のコマンドで行うことができますされませんか?
、私たちは、私が望んで配列フィールドの構造体を直接作成できますか? MATLABで
struct('a',1:4)
それは構造体の配列を作成しますが...
s = struct('a',[]);
s.a = 1:4;
我々は、単一のコマンドで行うことができますされませんか?
あなたは
s.a = 1:4;
を行う場合は、MATLABは、自動的に最初の行のための必要性を構造体を作成しません。
t1 = 1.3965e-06
t2 = 7.1217e-06
t3 = 7.1223e-06
直接配分することであることを示している
t1 = timeit(@no_preallocation);
t2 = timeit(@no_preallocation2);
t3 = timeit(@preallocation);
function no_preallocation()
s.a = 1:4;
end
function no_preallocation2()
s=struct('a',1:4);
end
function preallocation()
s = struct('a',[]);
s.a = 1:4;
end
を私が手:
は(質問の下のコメントを参照) timeitを使用する2つのバージョンともERFANのバージョン間の の性能差を取得するには実質的に速い。しかし、はあなたが前にメモリにs
を持っていた場合つまり、フィールドaを割り当てる前に、あなたが実際に構造体sを削除していないので、特にスクリプトでは、奇妙な行動につながることができます事前に割り当てるしないことに注意してくださいそれを保持し、意図した動作ではない可能性のあるaを上書きするだけです。したがって、エドリックとエルファンによって提案されたような事前配分が最も良いようです。
'struct( 'a'、1:4)'では、1つのフィールド 'a:[1 2 3 4]'を持つ構造体を取得します。 (R2015b) – erfan