Почему Matlab может сравнить пустую матрицу с одноэлементной матрицей?

мне было просто любопытно, почему Matlab может сравнить пустую матрицу с одноэлементной матрицей. В частности

>> [] == [1]

ans =

[]

просто кажется странным, что он это сделает, и мне просто интересно, почему он это сделает. Это также работает для других операций сравнения (=, >, !=). Это дает ошибку, если размер строки или столбца больше, чем один.

спасибо!

Edit: я также считаю, что они делают это для других операторов, таких как сложение, вычитание и т. д.

2 ответов


[] (пустая матрица) считается допустимым матричным представлением размера 0x0 по MATLAB. Из документации для eq функция, которая вызывается при использовании operator == для сравнения матриц, поведение выглядит следующим образом:

A == B сравнивает каждый элемент массива A для равенства с соответствующий элемент массива B, и возвращает массив с элементами логическим 1 (true) где A и B равны, или логический 0 (false) где они не равны. Каждый вход выражения может быть массивом или скалярное значение.

...

если один вход скалярный, а другой-нескалярный массив, то скалярный ввод обрабатывается так, как если бы это был массив, имеющий то же самое размеры как нескалярный входной массив.

в сравнении с [] == [1], левый операнд является скаляром (isscalar([]) возвращает 0) в то время как правый операнд является скалярным. Поэтому применяются скалярные правила расширения, и скалярный операнд расширяется до размеров не скалярного операнда (в этом случае 0x0), и результатом является пустая матрица.


с документация: Если один из операндов является скаляром, а другие матрицы, скаляр расширяется до размеров матрицы.

Это (немного нечетный) общий случай скалярного "расширения", чтобы соответствовать размеру матрицы, с которой он сравнивается. С помощью скаляров размер другого массива может быть любым. Это неверно для нескалярных сравнений массивов.