9

我只是好奇为什么 Matlab 可以将空矩阵与单例矩阵进行比较。尤其

>> [] == [1]

ans =

[]

它会这样做似乎很奇怪,我只是想知道它为什么会这样做。这也适用于其他比较操作(<=、<、>=、>、!=)。如果行或列的大小大于 1,则会出错。

谢谢!

编辑:我也相信他们为其他运算符执行此操作,例如加法、减法等。

4

2 回答 2

10

[]0x0(空矩阵)被MATLAB视为大小的有效矩阵表示。从函数的文档中eq,当您使用运算符==比较矩阵时会调用该函数,其行为如下:

A == B比较 array 的每个元素与 arrayA的相应元素是否相等B,并返回一个数组,其中元素设置为逻辑1( true),其中AB相等,或逻辑0( false),其中它们不相等。表达式的每个输入都可以是数组或标量值。

...

如果一个输入是标量而另一个是非标量数组,则标量输入被视为与非标量输入数组具有相同维度的数组。

在比较[] == [1]中,左操作数是非标量(isscalar([])返回0),而右操作数是标量。所以标量扩展规则适用,标量操作数被扩展为非标量操作数的维度(在这种情况下0x0),结果是一个空矩阵。

于 2012-10-18T18:30:36.203 回答
2

来自文档:如果一个操作数是标量而另一个是矩阵,则标量扩展为矩阵的大小。

这是标量“扩展”以匹配与之比较的矩阵的大小的(有点奇怪)一般情况。使用标量,另一个数组的大小可以是任何值。对于非标量数组比较,情况并非如此。

于 2012-10-18T18:28:00.980 回答