FD是excel文件,A是来自FD列5的数据。(第5列的每个单元格包括1,2或3)
如果FD中第5列中的单元格包含2或3,那么...... 否则,如果FD中第5列中的单元格包含1或3,则... ... 如果第5列中的所有单元格仅包含1,则.. ...
A = FD(:,5); C = 3x3矩阵
If A == 2 || A == 3
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif A == 1 || A == 3
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif A == 1 || A == 2
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif A == 1
Avg = C(1,1)/sum(sum(C));
elseif A == 2
Avg = C(2,2)/sum(sum(C));
elseif A == 3
Avg = C(3,3)/sum(sum(C));
else
Avg = sum(diag(C)./sum(C,2))/3;
end
但是,上述代码存在错误。 ???操作数到||和&&运算符必须可转换为逻辑标量值。
有人可以提供帮助吗?
答案 0 :(得分:2)
快捷操作符仅适用于标量。短线运营商的观点是,除非需要,否则不对RHS进行评估。因此,在以下示例中,永远不会评估A==2
:
A = 1;
I = A == 1 && A == 2
考虑到这一点,以下应该做什么?
A = [1 3]
I = A == 1 && A == 2;
此外,if-clause应该有标量条件。这段代码应该做什么?
if [true false], disp('true'), else disp('false'), end
您可能希望all
或any
合并矢量元素。
无论如何,我认为你的if-clauses也是错误的。尝试:
if all(A == 1)
Avg = C(1,1)/sum(sum(C));
elseif all(A == 2)
Avg = C(2,2)/sum(sum(C));
elseif all(A == 3)
Avg = C(3,3)/sum(sum(C));
elseIf all(A == 2 | A == 3)
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif all(A == 1 | A == 3)
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif all(A == 1 | A == 2)
Avg = sum(diag(C)./sum(C+eps,2))/2;
else
Avg = sum(diag(C)./sum(C,2))/3;
end
答案 1 :(得分:1)
你不能在matlab中使用数组上的短路操作。 如果你考虑一下,这是非常重要的。如果第一个操作数导致表达式为真/假,则无论其他操作数如何,短路运算符都会停止计算。但这在矢量中并非如此。
所以,试试用“|”和“&”而不是“||”和“&&”