自动广播警告:如何在Octave中将矩阵行与向量进行比较

时间:2015-07-17 04:09:41

标签: octave

我收到了警告:

  

警告:mx_el_eq:应用自动广播操作

来自代码:

f = [1;2;3];
f == 1:3;
warning: mx_el_eq: automatic broadcasting operation applied

这可以在没有警告的情况下完成吗?

2 个答案:

答案 0 :(得分:1)

这是因为您要将列向量f与行向量1:3进行比较。在Matlab中,这将是一个错误,但Octave会自动广播。这意味着为了应用==运算符,它将沿着单个维度(即大小为1的维度)展开您的一个向量。在这种情况下,两个向量都有一个单独的维度来扩展,因此你基本上得到了相同的:

a1 = [1  1  1;
      2  2  2;
      3  3  3];  %// for f

a2 = [1  2  3
      1  2  3
      1  2  3];  %// for 1:3

a1 == a2

请注意,为了在Matlab中获得相同的结果,您必须直接调用bsxfun

bsxfun(@eq, f, 1:3)

为了在没有广播的情况下比较你的矢量元素,你只需要转置其中一个:

f' == 1:3

答案 1 :(得分:1)

自动广播是Octave 3.6中引入的新功能。令许多人感到惊讶(他们预计会出现错误),所以决定发出警告。要禁用此警告,您需要使用以下命令将其关闭:

warning ("off", "Octave:broadcast");

您也可以仅在功能范围内关闭它:

warning ("off", "Octave:broadcast", "local");

但是,我建议您在.octaverc文件中执行此操作。

投掷警告的决定的问题在于,当你真的没有时,听起来你做错了。因此,截至Octave 4.0,该警告已被删除(现在它已成为" Octave:语言扩展"警告ID)的一部分。