if male(m,7)==0||male(m,7)==1
if female(f,7)==0||female(f,7)==1
Wfst = 1;
end
if female(f,7)==2||female(f,7)==3||female(f,7)==4
Wfst = 1/2;
end
if female(f,7) == -1
Wfst = 1/2;
end
end
if male(m,7)==2||male(m,7)==3||male(m,7)==4
if female(f,7)==0||female(f,7)==1
Wfst = 0;
end
if female(f,7)==2||female(f,7)==3||female(f,7)==4
Wfst = 1;
end
if female(f,7) == -1
Wfst = 1/2;
end
end
任何人都可以提出一种处理条件分配的简短方法。我已经发布了我正在处理的实际代码。
答案 0 :(得分:4)
您可以使用switch/case
。像这样:
switch male(m, 7)
case {0, 1}
switch female(f,7)
case {0, 1}
Wfst = 1;
case {2, 3, 4}
Wfst = 1/2;
case -1
Wfst = 1/2;
end
case {2, 3, 4}
switch female(f,7)
case {0, 1}
Wfst = 0;
case {2, 3, 4}
Wfst = 1;
case -1
Wfst = 1/2;
end
end
它不短于你的,但很容易理解。
答案 1 :(得分:3)
您可以替换
a == n1 || a == n2 || a == n3
与
any(a == [n1, n2, n3])
本着同样的精神,对于将来,如果您碰巧拥有&&
而非||
,则可以使用matlab函数all
代替any
答案 2 :(得分:1)
我认为这并没有真正简化它,但也许你可以从中获取一些元素,所以这里有一个包含相同逻辑的1个衬垫:
M = male(f, 7)
F = female(f, 7)
Wfst = (M < 2) * ( 1 - any(F == [-1 2:4])*0.5 ) + (M > 1) * ( (F == -1)*0.5 + any(F == 2:4))
所以基本的想法是Matlab类隐式地将逻辑类型变量转换为整数,其中true为1而零为false,因此您可以乘以条件。
例如:
if (a > 10)
b = 5;
else
b = 10;
end
与
相同b = (a > 10)*5 + ~(a > 10)*10;
简化为
b = 10 - (a > 10)*5;