【问题标题】:Is it possible to apply colon operator on an expression in MATLAB?是否可以在 MATLAB 中的表达式上应用冒号运算符?
【发布时间】:2012-02-18 01:32:44
【问题描述】:

如果可以在表达式上使用冒号运算符,那将非常方便。好吧,据我所知,这是不可能的。例如,当我想计算两个矩阵之间的差异时,我必须分两行来完成。

diff = (a - b);
err = sum(abs(diff(:)));

而不是

diff = sum(abs((a-b)(:)));

周围有吗?

【问题讨论】:

    标签: matlab colon


    【解决方案1】:

    您可以使用匿名辅助函数绕过语法限制。 EG

    oneD = @(x)x(:);
    diff = sum(abs(oneD(a-b))));
    

    仍然需要两行。

    【讨论】:

    • 我喜欢你的想法。我希望你能命名一个冒号。它可能与冒号运算符冲突!
    • 你是对的。使用名称colon 会给您带来无穷无尽的麻烦。
    • 所以你认为用另一个两行解决方案替换一个两行解决方案是一个有效的答案,另外用一个匿名解决方案替换简单的冒号运算符! “事情应该尽可能简单,但不能再简单了。”
    【解决方案2】:

    两种选择:

    err = sum(abs(a(:)-b(:)));
    

    err = sum(abs(reshape(a-b,[],1)));
    

    【讨论】:

      【解决方案3】:

      在这种特殊情况下,您可以使用sum(abs(a(:)-b(:))),但一般而言,Matlab 不支持这种嵌套索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-28
        • 2022-07-31
        相关资源
        最近更新 更多