【发布时间】:2012-02-18 01:32:44
【问题描述】:
如果可以在表达式上使用冒号运算符,那将非常方便。好吧,据我所知,这是不可能的。例如,当我想计算两个矩阵之间的差异时,我必须分两行来完成。
diff = (a - b);
err = sum(abs(diff(:)));
而不是
diff = sum(abs((a-b)(:)));
周围有吗?
【问题讨论】:
如果可以在表达式上使用冒号运算符,那将非常方便。好吧,据我所知,这是不可能的。例如,当我想计算两个矩阵之间的差异时,我必须分两行来完成。
diff = (a - b);
err = sum(abs(diff(:)));
而不是
diff = sum(abs((a-b)(:)));
周围有吗?
【问题讨论】:
您可以使用匿名辅助函数绕过语法限制。 EG
oneD = @(x)x(:);
diff = sum(abs(oneD(a-b))));
仍然需要两行。
【讨论】:
colon 会给您带来无穷无尽的麻烦。
两种选择:
err = sum(abs(a(:)-b(:)));
或
err = sum(abs(reshape(a-b,[],1)));
【讨论】:
在这种特殊情况下,您可以使用sum(abs(a(:)-b(:))),但一般而言,Matlab 不支持这种嵌套索引。
【讨论】: