我收到了警告:
警告:mx_el_eq:应用自动广播操作
来自代码:
f = [1;2;3];
f == 1:3;
warning: mx_el_eq: automatic broadcasting operation applied
这可以在没有警告的情况下完成吗?
答案 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)的一部分。