通常,在八度中,'+
'仅在两个操作数的维数相同时起作用。
此规则似乎有一个例外:如果您“ +
”行向量(1 x n
)和列向量(n x 1
),则Octave会产生一个(合理的)尺寸矩阵({{1)}:
n x n
可以防止这种情况发生,或者至少可以发出警告吗?看来可能不安全;最近,我被一个被这种行为掩盖的错误咬住了。
谢谢!
答案 0 :(得分:4)
否,这无法避免。您需要检查功能的输入。您提到的例外不是例外,它是语言语法。
按元素进行的操作要求尺寸的长度相等或长度为1。您尝试阻止的功能也是使该功能起作用的功能:
octave:1> a = 1:4
a =
1 2 3 4
octave:2> a+1
ans =
2 3 4 5
octave:3> a == 2
ans =
0 1 0 0
在以上示例中,广播或扩展了长度为1(1x1)的维度中的值。此功能在Octave和Python中称为广播,在Matlab中称为隐式扩展。有很多操作符和函数,例如==
和max
也可以广播。
有一段时间,在Octave 3.6和3.8中,可以通过将Octave:broadcast
变成错误来禁用此功能。但是,由于用语言处理错误的方式有效地使所有使用广播的Octave函数出错。