[英]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.