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