如何在matlab中使用'if'语句?

Abi*_*gan 0 matlab if-statement vector cell cell-array

我有一个大小为5x5的单元格数组,如下所示

 B= 00 10 11 10 11 
    01 01 01 01 11 
    10 00 01 00 01 
    10 10 01 01 11 
    10 10 10 00 10 
Run Code Online (Sandbox Code Playgroud)

和两个列向量

 S1= 21 
     23
     28 
     25 
     43 

 S2= 96 
     85 
     78 
     65 
     76 
Run Code Online (Sandbox Code Playgroud)

我想创建一个与B说5x5大小相同的新单元格数组,以满足以下条件

  Final={S1 if B{i}=11
         S1 if B{i}=10
         S2 if B{i}=01
         S2 if B{i}=00
Run Code Online (Sandbox Code Playgroud)

因此产生的输出将是这样的

  Z = s2 s1 s1 s1 s1   
      s2 s2 s2 s2 s1
      s1 s2 s2 s2 s2
      s1 s1 s2 s2 s1
      s1 s1 s1 s2 s1
ie Z= 96 21 21 21 21 
      85 85 85 85 23 
      28 78 78 78 78
      25 25 65 65 25
      43 43 43 76 43
Run Code Online (Sandbox Code Playgroud)

我尝试使用if条件,但我得到错误说'错误:等号左边的表达式不是作业的有效目标.'

 for i=1:1:128
   for j=1:1:16
      if fs{i,j}=00
         Z{i,j}=S1{i,j}
      elseif fs{i,j}= 01
         Z{i,j}=S2{i,j}
      elseif fs{i,j}= 10
         Z{i,j}=S1{i,j}
      elseif fs{i,j}= 11
         Z{i,j}=S2{i,j}
        end
     end
Run Code Online (Sandbox Code Playgroud)

我想我在if语句和我正在使用的表达式中犯了一个错误.我哪里错了?请提前帮助谢谢.

wei*_*yin 5

使用==进行比较和=用于分配.所以if fs{i,j}==00,等等

编辑:Matlab真的是为高度矢量化的操作而设计的.与本机函数相比,嵌套循环很慢,通常可以用矢量化版本替换.是否有任何特殊原因使用单元数组而不是矩阵,尤其是当您只有数字数据时?

如果B,S1和S2是矩阵,那么您的代码可以写在一个运行速度更快的高效行中:

Z = bsxfun(@times, S1, B == 11 | B == 10) + bsxfun(@times, S2, B == 01 | B == 0)