Векторизованные операции с массивами ячеек

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

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) тоже работают не колдовством, а потому, что оба случая реализованы внутри.

8
задан Community 23 May 2017 в 12:24
поделиться