2017-07-14 10 views
0

あなたは、例えば5×5ランダム行列を使用している場合:ネストされたループと条件文(Matlabの)

A(i,j) = (5 4 3 2 1 
      4 3 2 1 0 
      5 4 3 2 1 
      4 3 2 1 0 
      5 4 3 2 1) 

そして二番目の配列:

B(1,j) = (4 5 6 7 8) 

私はその後、Bの値を割り当てることができますどのようにB(1、j)の値がAのある列からの値のいずれかよりも大きい場合にのみこれを行う必要がある場合はAに?

たとえば、Aの最初の列ではA(1,1)、A(3,1)、A(5,1)よりも大きいので、これらは必須です4で置き換えられます。第2列目では、何も交換する必要はありません。

ありがとうございました!

答えて

0

Matlab "find"が役に立つかもしれません。

https://www.mathworks.com/help/matlab/matlab_prog/find-array-elements-that-meet-a-condition.html

あなたはスピードや効率性を懸念していない場合は、AとB

の値を比較する条件(すなわちAN場合)ステートメントを使用してforループのネストされた2を設定することができ

Bとのカラムワイズ比較にのみ興味がある場合は、内側ループの外側ループのインクリメントを使用できます。

for i,... 
for j,... 
    if B(1,i) > A(j,i) 
     A(j,i)=B(i,j) 
5

あなたはbsxfunを使用して明示的なループせずにこれを行うことができます。

A = [5 4 3 2 1 
    4 3 2 1 0 
    5 4 3 2 1 
    4 3 2 1 0 
    5 4 3 2 1]; 
B = [4 5 6 7 8]; 

A = bsxfun(@min,A,B); 

結果:MATLABのそれ以降のバージョンで

A = 

    4 4 3 2 1 
    4 3 2 1 0 
    4 4 3 2 1 
    4 3 2 1 0 
    4 4 3 2 1 

(2016B以降)あなたもbsxfunを省略して取得することができます同じ結果。

A = min(A,B); 
関連する問題