Create a matrix of random numbers with different distributions in each entry
2 ビュー (過去 30 日間)
古いコメントを表示
Pavel Penshin
2020 年 2 月 23 日
コメント済み: Thiago Henrique Gomes Lobato
2020 年 2 月 23 日
Say I have a matrix and I want to add an error to each of the elements, the error should be normally distributed around the element with variance of 0.1 of the value of the element.
That is how I implemented this:
A = [1 2 3 ; 4 5 6 ; 7 8 9]
sz=size(A);
sigma = 0.1*A;
err = zeros(sz);
for i=1:sz(1)
for j=1:sz(2)
pd = makedist('Normal','sigma',sigma(i,j));
err(i,j)=random(pd);
end
end
Result = A + err;
This is ok for 9 elemens but it is very time consuming when my matrix is 3000X3000
Is there any more efficient way to do so?
0 件のコメント
採用された回答
Thiago Henrique Gomes Lobato
2020 年 2 月 23 日
編集済み: Thiago Henrique Gomes Lobato
2020 年 2 月 23 日
Your code does basically this:
A = [1 2 3 ; 4 5 6 ; 7 8 9]
Result = A + randn(size(A))*0.1;
In your question however you seem to mean that the variance should be 0.1 of the element value, if this is the case do this:
A = [1 2 3 ; 4 5 6 ; 7 8 9]
Result = A.*(1+randn(size(A))*0.1)
I'm not sure what you actually want but those two solutions should solve it way faster than a loop
4 件のコメント
Thiago Henrique Gomes Lobato
2020 年 2 月 23 日
Yes. If you need the error matrix you can do it like this:
err = A.*randn(size(A))*0.1
Result = A+err;
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!