结果行中的警告:mx_el_eq:已应用自动广播操作

Warning in findings rows: mx_el_eq: automatic broadcasting operation applied

我有一个矩阵,s,像这样:

s =

   1   2   3
   4   5   2
   4   4   2

我想找到第一列为 4,第二列为 5 的行,所以我创建了这个:

sum((s(:,1:2) == [4 5]),2) == 2

效果很好 return:

ans =

   0
   1
   0

一切都很好,但是这部分代码:s(:,1:2) == [4 5]),2) 生成警告:

warning: mx_el_eq: automatic broadcasting operation applied

比较多列的正确方法是什么?我想创建没有警告的代码。

将 bsxfun 与 "eq" 一起使用(等于):

s = [1 2 3; 4 5 2; 4 4 2]
all (bsxfun (@eq, s(:,1:2), [4 5]), 2)
ans =

   0
   1
   0

您收到警告的原因是自动广播是一项新功能,可能会让用户措手不及。此警告是暂时的,已被删除(Octave 4.0.0 是第一个删除此警告的版本)。

这并不真的意味着你做错了什么,恰恰相反。如果它适合您,那么您就发现了一个非常强大的新功能。如果您习惯使用此功能,可以关闭警告:

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