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

Automatic broadcasting warning: How to compare matrix rows to vector in Octave

我收到警告:

warning: mx_el_eq: automatic broadcasting operation applied

来自代码:

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

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

这是因为您正在比较列向量 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

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

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

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

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

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

发出警告的决定的问题在于,当您实际上没有做错事时,听起来像是您做错了什么。因此,从 Octave 4.0 开始,该警告已被删除(它现在是 "Octave:language-extension" 警告 ID 的一部分)。