Почему Matlab может сравнить пустую матрицу с одноэлементной матрицей?
мне было просто любопытно, почему Matlab может сравнить пустую матрицу с одноэлементной матрицей. В частности
>> [] == [1]
ans =
[]
просто кажется странным, что он это сделает, и мне просто интересно, почему он это сделает. Это также работает для других операций сравнения (=, >, !=). Это дает ошибку, если размер строки или столбца больше, чем один.
спасибо!
Edit: я также считаю, что они делают это для других операторов, таких как сложение, вычитание и т. д.
2 ответов
[]
(пустая матрица) считается допустимым матричным представлением размера 0x0
по MATLAB. Из документации для eq
функция, которая вызывается при использовании operator ==
для сравнения матриц, поведение выглядит следующим образом:
A == B
сравнивает каждый элемент массиваA
для равенства с соответствующий элемент массиваB
, и возвращает массив с элементами логическим1
(true
) гдеA
иB
равны, или логический0
(false
) где они не равны. Каждый вход выражения может быть массивом или скалярное значение....
если один вход скалярный, а другой-нескалярный массив, то скалярный ввод обрабатывается так, как если бы это был массив, имеющий то же самое размеры как нескалярный входной массив.
в сравнении с [] == [1]
, левый операнд является скаляром (isscalar([])
возвращает 0
) в то время как правый операнд является скалярным. Поэтому применяются скалярные правила расширения, и скалярный операнд расширяется до размеров не скалярного операнда (в этом случае 0x0
), и результатом является пустая матрица.
с документация: Если один из операндов является скаляром, а другие матрицы, скаляр расширяется до размеров матрицы.
Это (немного нечетный) общий случай скалярного "расширения", чтобы соответствовать размеру матрицы, с которой он сравнивается. С помощью скаляров размер другого массива может быть любым. Это неверно для нескалярных сравнений массивов.