Этот пост был инициирован после обсуждения того, являются ли массивы ячеек "нормальными массивами" и что векторизация не работает для массивов ячеек.
I Интересно, почему следующий синтаксис векторизации не реализован в MATLAB, что говорит против:
>> {'hallo','matlab','world'} == 'matlab'
??? Undefined function or method 'eq' for input arguments of type 'cell'.
внутренне он был бы эквивалентен
[{'hallo'},{'matlab'},{'world'}] == {'matlab'}
, потому что MATLAB знает, когда выполнять приведение, следующие работы:
[{'hallo','matlab'},'world']
Массив ячеек - это массив указатели . Если и левая, и правая стороны указывают на одинаковые объекты, isequal ('hallo', 'hallo')
возвращает ожидаемое значение true, тогда почему MATLAB по-прежнему не позволяет использовать самый верхний пример?
Я знаю Я могу использовать strmatch
или cellfun
.
РЕЗЮМЕ :
==
, который требуется для векторизации в приведенном выше примере, равен eq
, а не равно
(другие операторы: , то есть lt
и т. д.)
eq
встроен для числовые типы для всех других типов (например, строк) MATLAB дает свободу перегрузки этого (и других) операторов. myFun (myString)
или myFun (myCellOfStrings)
, также возможна, вам просто нужно реализовать ее внутри в [11112 540] myFun . Функции sin (val)
и sin (array)
тоже работают не колдовством, а потому, что оба случая реализованы внутри.