Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套循环和条件语句(Matlab)_Matlab_Loops_Nested_Conditional - Fatal编程技术网

嵌套循环和条件语句(Matlab)

嵌套循环和条件语句(Matlab),matlab,loops,nested,conditional,Matlab,Loops,Nested,Conditional,如果您有一个随机矩阵,例如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代替

如果您有一个随机矩阵,例如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);

您可以使用
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“find”可能对您有用

如果您不关心速度或效率,还可以设置一个两个嵌套for循环,并使用一个比较a和B值的条件(即If)语句

如果您只对B的列比较感兴趣,那么可以在内部循环中使用外部循环的增量

for i,...
 for j,...
   if B(1,i) > A(j,i)
       A(j,i)=B(i,j)
Matlab“find”可能对您有用

如果您不关心速度或效率,还可以设置一个两个嵌套for循环,并使用一个比较a和B值的条件(即If)语句

如果您只对B的列比较感兴趣,那么可以在内部循环中使用外部循环的增量

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