#arrays #matlab
#массивы #matlab
Вопрос:
round
Функция может принимать скаляр и работать с ним. Однако он также может принимать массив и работать с ним ожидаемым образом.
>> round(2.3)
ans =
2
>> round([2.3,3.4])
ans =
2 3
У меня аналогично есть функция, и я хочу, чтобы она работала «ожидаемым» образом для входных данных массива. Это хорошо работает для скалярных входных данных. Я мог бы запустить for
цикл и оценить свою функцию для каждого элемента массива, но какие другие более разумные способы у меня есть?
Для дальнейшей конкретности у меня есть:
function [a,b]=func(c,d,e,f)
И у меня есть d,e,f
, но я хочу оценить функцию до нескольких значений c
:-
g=[];
for i=1:10
[a,b]=func(c(i),d,e,f);
g=[g;[a,b]];
end
Я не совсем уверен, как применять arrayfun
, хотя я считаю, что это то, что я должен использовать.
Ответ №1:
То, что вы ищете, — это функция arrayfun. Вот документация: http://www.mathworks.com/help/matlab/ref/arrayfun.html
Скажем, у меня есть такая функция:
function res = myTest(a,b)
size(a) % for checking that we work on each element
res = a 1;
res = res b;
У меня есть матрица A
A = magic(3);
Я хочу применить MyTest с равным каждому элементу в
A1 = arrayfun(@(x) myTest(x,2),A)
(x заменяется элементами массива, объявленными после запятой)
Комментарии:
1. я вижу, я добавил несколько запросов, основанных на вашем предложении в моем вопросе. Вы можете помочь?