如何防止Octave对行向量和列向量求和?

时间:2018-12-25 17:35:40

标签: octave

通常,在八度中,'+'仅在两个操作数的维数相同时起作用。

此规则似乎有一个例外:如果您“ +”行向量(1 x n)和列向量(n x 1),则Octave会产生一个(合理的)尺寸矩阵({{1)}:

n x n

可以防止这种情况发生,或者至少可以发出警告吗?看来可能不安全;最近,我被一个被这种行为掩盖的错误咬住了。

谢谢!

1 个答案:

答案 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函数出错。