MATLABで非数値ベクトルを事前に割り当てる方法はありますか?
unprocessedData = fetchData(); % returns a vector of structs or objects
processedData = []; % will be full of structs or objects
for dataIdx = 1 : length(unprocessedData)
processedDatum = process(unprocessedData(dataIdx));
processedData = [processedData; processedDatum];
end
関数は最適ではありませんが、processedData
ベクトルはループ内で成長しています。 mlint
でもスピードをあらかじめ配分することを検討すべきだと私に警告しています。
データをint8
のベクトルにしていましたが、これを行うことができます:
% preallocate processed data array to prevent growth in loop
processedData = zeros(length(unprocessedData), 1, 'int8');
そして連結するのではなくベクトルスロットを満たすようにループを修正してください。
には、後で構造体やオブジェクトを保持できるようにベクトルを事前に割り当てる方法がありますか?
更新:はAzim's answerからインスピレーションを得て、単純にループの順序を逆転させました。
これは、MATLABがprocessedData
を初期化してから、process()
によって返されるオブジェクトに有効な0引数のコンストラクタが必要であることを前提としています実際のオブジェクトで最初にそれに書き込みます。
mlint
は可能な配列の増加についてまだ不平を言っていますが、逆ループの反復を認識できないためだと思います...
+1これはrepmatが有用な状況の1つです。 – Azim