Соедините ваш мобильный телефон с другим Wi-Fi-соединением с другим поставщиком услуг . Это кажется странным, но вы можете попробовать это!
Краткий ответ: встроенная функция arrayfun
делает именно то, что ваша функция map
делает для числовых массивов:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Есть два других встроенные функции, которые ведут себя аналогично: cellfun
(который работает с элементами массива ячеек) и structfun
(который работает с каждым полем структуры).
Однако эти функции часто не нужны, если вы пользуетесь преимуществами векторизации, в частности, с помощью поэлементных арифметических операторов . Для приведенного вами примера векторизованное решение будет выглядеть следующим образом:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Некоторые операции будут автоматически работать с элементами (например, добавление скалярного значения к вектору), в то время как другие операторы имеют специальный синтаксис для поэлементных операций (обозначается ].
перед оператором).
В дополнение к векторным и поэлементным операциям существует также cellfun
для сопоставления функций с массивами ячеек. . Например:
cellfun(@upper, {'a', 'b', 'c'}, 'UniformOutput',false)
ans =
'A' 'B' 'C'
Если 'UniformOutput' истинно (или не предоставлено), он попытается объединить результаты в соответствии с размерами массива ячеек, поэтому
cellfun(@upper, {'a', 'b', 'c'})
ans =
ABC
Если Matlab не имеет встроенной функции отображения, это могло быть связано с соображениями эффективности. В вашей реализации вы используете цикл для перебора элементов списка, что обычно не одобряется в мире Matlab. Большинство встроенных функций Matlab являются "векторизованными", т.е. более эффективно вызывать функцию для всего массива, чем выполнять итерацию по нему самостоятельно и вызывать функцию для каждого элемента.
Другими словами, this
a = 1:10;
a.^2
намного быстрее, чем этот
a = 1:10;
map(@(x)x^2, a)
, если принять ваше определение карты.
You don't need map
since a scalar-function that is applied to a list of values is applied to each of the values and hence works similar to map
. Just try
l = 1:10
f = @(x) x + 1
f(l)
In your particular case, you could even write
l.^2