2016-09-19 9 views
0

MATLABでループを使用せずに特定のベクトル(私の場合はランダムベクトル)の行列を置き換えることは可能ですか?ループを使用せずにベクトルの行列行を置換する

は、与えられた:

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

をIは、例えば、でv = rand(1,3)A([2 3],:)を交換したいが、私は実際Aの(この場合2及び3における)各選択された行がランダムに生成されることを望みます。

この問題は、MATLABでループを使用せずに、与えられたすべての行列Aに対して一般化したいのです。出来ますか?

ありがとうございます。
ルイ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

あなたの答えは大変です!そして、私はもっと具体的ではなく、時間を無駄にしてしまったことをとても残念に思っていました。しかし、実際には、行列のいくつかの行をループを使わずに生成されたベクトルに変更する方法があるかどうかを知りたいと思っていました)。私は誤解のために本当に残念です。 –

+0

@RuiSemeanoこの答えにループはありません。これはまさにそれがしていることです。事前定義された行(2と3)の最初のバージョンとランダムなN行の2番目のバージョン。あなたは何が欠けていますか? – EBH

+0

問題は私が本当により具体的でなければならないということです。私は関数で組み立てられた "ランダムジェネレータ"を使いたくありません。私はマトリックスではなく、ただ一つのベクトルを出力する私の "ランダムジェネレータ"を使用したいと思います。だから私は、選択されたすべての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

ありがとうございました!そして、私はもっと具体的ではなく、時間を無駄にしてしまったことをとても残念に思っていました。しかし、実際には、行列のいくつかの行をループを使わずに生成されたベクトルに変更する方法があるかどうかを知りたいと思っていました)。私は誤解のために本当に残念です。 –

関連する問題