- tell the editor to ignore the warning: right click, "suppress ... on this line"
- use a preallocated cell array, concatenate after the loop.
- figure out the final size (the total number of elements you require is just numel(x)*numel(y)).
- use simpler, more efficient code:
Cannot pre-allocate an empty matrix?
2 ビュー (過去 30 日間)
古いコメントを表示
Hello, I'd like to create a matrix that increases with every loop by concatenation the matrix to itself, starting from an empty matrix as shown below
Q1s = [];
alphas = [];
for y = ymin:0.5:ymax
x = (xmin:2.5e-13:xmax)';
Q1s = vertcat(Q1s,x);
alphas = vertcat(alphas,ones(size(x))*y);
end
Now I'm getting the famous "consider pre-allocating for speed" message. But I need Q1 and alpha to be empty matrices to begin with because I'm using vertcat. Is there a way to go about this?
0 件のコメント
採用された回答
Stephen23
2018 年 5 月 14 日
編集済み: Stephen23
2018 年 5 月 14 日
There are many ways:
[Q1s,alphas] = ndgrid(xmin:2.5e-13:xmax,ymin:0.5:ymax);
Q1s = Q1s(:);
alphas = alphas(:);
Those three lines give the exactly same output as your code, yet avoids all the bother of loops and expanding arrays and all that jazz.
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!