自动广播警告:如何将矩阵行与 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 的一部分)。
我收到警告:
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 的一部分)。