1. 程式人生 > >matlab隨機數及行、列歸一化

matlab隨機數及行、列歸一化

(1) 按照【正態分佈】生成一定範圍內的隨機數

A1=normrnd(0.9533,0.0022,[23,10000]); (均值,標準差,[行數,列數])

(2)  按【均勻分佈】生成一定範圍內的隨機數

w1=unifrnd(0,1,10000,23);  (上限,下限,行數,列數)

(3)生成 【給定值】的隨機數

A=[1 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5];

B=A(randperm(length(A)));

結果生成:

[1 3 5 3 4 2 5 5 5 3 1 4 2 5 4 2 1 2 4 1 3 3 4]

如果把第二行改為:

B=(randperm(length(A)));

[5 11 19 17 10 3 2 9 6 14  21  20  8 15 16 1 18 23 22  4 12 13 7]生成的為A長度的值(23) 的1-23內的隨機數

等同於 直接輸入 B=(randperm(23);

(4)行歸一化

w1=unifrnd(0,1,1,10000);

w2=unifrnd(0,1,1,10000);

w3=unifrnd(0,1,1,10000);

w=vertcat(w1,w2,w3);

W=w.'; 

for i = 1:10000

W(i,:)=W(i,:)/sum(W(i,:));

end

w1w2w3生成服從均勻分佈的1X10000的隨機數矩陣。

函式vercat為垂直串聯矩陣,組成一個

3X10000的矩陣。

for迴圈是將每一行的數值除以該行數值總和,即歸一化。

(5)行、列數值除以該列最大值

w1=unifrnd(0,1,1,10000);

w2=unifrnd(0,1,1,10000);

w3=unifrnd(0,1,1,10000);

w=vertcat(w1,w2,w3);

w1Max=max(w')';%求每一行的最大值

xMax=repmat(w1Max,[1 10000]);%平鋪最大值

w1=w./xMax; %每一行的每一個數值都除以該行最大值

w2Max=max(w);%求每一列的最大值

w22=vertcat(w2Max,w2Max,w2Max);%平鋪最大值

w2=w./w22;%每一列的每一個數值都除以該列最大值

(6)取矩陣對角線元素

A11=(diag(A1));