我有一个矩阵s
,就像这样:
s =
1 2 3
4 5 2
4 4 2
我想找到第一列为4,第二列为5的行,所以我创建了这个:
sum((s(:,1:2) == [4 5]),2) == 2
哪个工作正常并返回:
ans =
0
1
0
一切都很棒,但这部分代码:s(:,1:2) == [4 5]),2)
生成警告:
警告:mx_el_eq:应用自动广播操作
比较多列的正确方法是什么?我想在没有警告的情况下创建代码。
答案 0 :(得分:4)
您收到警告的原因是自动广播是一项新功能,可能会让用户感到意外。此警告是暂时的,并已被删除(Octave 4.0.0是删除此警告的第一个版本)。
这并不意味着你做错了什么,恰恰相反。如果它对你做对了,你就找到了一个新的非常强大的功能。如果您习惯使用此功能,可以关闭警告:
warning ("off", "Octave:broadcast")
答案 1 :(得分:3)
将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