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