2016-09-19 40 views
0

是否有可能在不使用MATLAB中的循環的情況下替換某些特定矢量矩陣的行(在我的情況下是隨機矢量)?不使用循環替換矢量的矩陣行

鑑於:

A = [1 2 3; 
    4 5 6; 
    7 8 9; 
    10 11 12] 

我想替換A([2 3],:)與,例如,但v = rand(1,3)我真正想要的是的A各自選擇行(3在這種情況下圖2和)是隨機生成的。

這個問題是我想推廣它來爲每個給定的矩陣A而不使用MATLAB中的循環。可能嗎?

謝謝。
瑞Semeano

回答

3

如何:

A([2 3],:) = rand(2,size(A,2)); 

您可以通過size(A,2)得到A列數,然後創建一個隨機矩陣所需要的尺寸,只是把它分配給A

如果你想也隨機選擇了行,那麼對於N行可以這樣寫:

N = 2; 
randRows = randperm(size(A,1),N); 
A(randRows,:) = rand(N,size(A,2)) 

P.S - 如果你想隨機整數,使用randi

+0

非常感謝您的回答!我非常抱歉,我沒有更具體,讓你浪費時間,但我真正想要知道的是,是否有辦法將矩陣的某些行更改爲生成的矢量而不使用循環(或repmat )。對於誤解,我深表歉意。 –

+0

@RuiSemeano在這個答案中沒有循環,這正是它所做的。預定義行(2和3)的第一個版本,以及隨機N行的第二個版本。你錯過了什麼? – EBH

+0

問題是我真的應該更具體。我不想使用funcion中的「隨機生成器」。我想用我的「隨機生成器」,它只輸出一個矢量,而不是矩陣。所以我希望A的每個選定行都被一個隨機生成的向量替換,而不使用循環或repmat。但無論如何,我認爲更好的解決方案是讓我的隨機生成器能夠輸出矩陣,而不僅僅是一個向量。感謝您的耐心 –

0

聽起來像你想隨機產生[2,3]?我不確定,所以我只是把所有事情都詳細地命名,並且把所有的事情都隨機化。

MinimumInteger = 1; 
MaximumInteger = 12; 
NumberOfRows = 4; 
NumberOfColums = 3; 

A = randi([MinimumInteger, MaximumInteger], NumberOfRows, NumberOfColums); 

NumberOfRowsToChange = randi([0, NumberOfRows]); 

RowsToChange = randperm(NumberOfRows, NumberOfRowsToChange); 

A(RowsToChange, :) = randi([MinimumInteger, MaximumInteger], NumberOfRowsToChange, NumberOfColums); 
+0

非常感謝您的回答!我非常抱歉,我沒有更具體,讓你浪費時間,但我真正想要知道的是,是否有辦法將矩陣的某些行更改爲生成的矢量而不使用循環(或repmat )。對於誤解,我深表歉意。 –