我只是好奇为什么 Matlab 可以将空矩阵与单例矩阵进行比较。尤其
>> [] == [1]
ans =
[]
它会这样做似乎很奇怪,我只是想知道它为什么会这样做。这也适用于其他比较操作(<=、<、>=、>、!=)。如果行或列的大小大于 1,则会出错。
谢谢!
编辑:我也相信他们为其他运算符执行此操作,例如加法、减法等。
我只是好奇为什么 Matlab 可以将空矩阵与单例矩阵进行比较。尤其
>> [] == [1]
ans =
[]
它会这样做似乎很奇怪,我只是想知道它为什么会这样做。这也适用于其他比较操作(<=、<、>=、>、!=)。如果行或列的大小大于 1,则会出错。
谢谢!
编辑:我也相信他们为其他运算符执行此操作,例如加法、减法等。
[]
0x0
(空矩阵)被MATLAB视为大小的有效矩阵表示。从函数的文档中eq
,当您使用运算符==
比较矩阵时会调用该函数,其行为如下:
A == B
比较 array 的每个元素与 arrayA
的相应元素是否相等B
,并返回一个数组,其中元素设置为逻辑1
(true
),其中A
和B
相等,或逻辑0
(false
),其中它们不相等。表达式的每个输入都可以是数组或标量值。...
如果一个输入是标量而另一个是非标量数组,则标量输入被视为与非标量输入数组具有相同维度的数组。
在比较[] == [1]
中,左操作数是非标量(isscalar([])
返回0
),而右操作数是标量。所以标量扩展规则适用,标量操作数被扩展为非标量操作数的维度(在这种情况下0x0
),结果是一个空矩阵。
来自文档:如果一个操作数是标量而另一个是矩阵,则标量扩展为矩阵的大小。
这是标量“扩展”以匹配与之比较的矩阵的大小的(有点奇怪)一般情况。使用标量,另一个数组的大小可以是任何值。对于非标量数组比较,情况并非如此。