簡體   English   中英

嵌套循環和條件語句(Matlab)

[英]Nested loop and conditional statement (Matlab)

如果您有一個隨機矩陣,例如5x5:

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(1,j)的值大於A的某個列中的任何值時才需要這樣做,我該如何將B的值分配給A?

例如,B(1,1)= 4,並且在A的第一個列中,它大於A(1,1),A(3,1)和A(5,1),因此必須將其替換為4在第二列中,不需要替換任何內容,依此類推。

已經謝謝你了!

您可以使用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);

結果:

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

在更高版本的MATLAB(2016b和更高版本)中,您甚至可以省略bsxfun並獲得相同的結果。

A = min(A,B);

Matlab“查找”可能對您有用。

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

如果您不關心速度或效率,也可以設置兩個嵌套的for循環,並使用條件(即if)語句比較A和B的值。

如果只對與B的列進行比較感興趣,則可以在內部循環中使用外部循環的增量。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM