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语句和我正在使用的表达式中犯了一个错误.我哪里错了?请提前帮助谢谢.
使用==进行比较和=用于分配.所以if fs{i,j}==00,等等
编辑:Matlab真的是为高度矢量化的操作而设计的.与本机函数相比,嵌套循环很慢,通常可以用矢量化版本替换.是否有任何特殊原因使用单元数组而不是矩阵,尤其是当您只有数字数据时?
如果B,S1和S2是矩阵,那么您的代码可以写在一个运行速度更快的高效行中:
Z = bsxfun(@times, S1, B == 11 | B == 10) + bsxfun(@times, S2, B == 01 | B == 0)