У меня есть трехмерный массив размеров (строки x столбцы x 8). Для каждого элемента в первых двух измерениях у меня есть 8 значений в третьем измерении, которые я должен подогнать под такое уравнение, как экспоненциальное, полиномиальное и т. д. Я написал код для этой функции, и в настоящее время я получаю результат, перебирая первые два измерения, как показано ниже:
for i=1:rows
for j=1:cols
outputArray(i,j) = functionHandle(inputArray(i,j,1:8));
end
end
Могу ли я каким-то образом использовать bsxfun, arrayfun или какой-либо другой метод векторизации, чтобы избавиться от циклов for, чтобы я генерировал свой вывод, используя что-то вроде этого?
outputArray = bsxfun(@functionHandle,inputArray)
Добавление дескриптора функции
function output = functionHandle(xData,yData)
ft = fittype( 'a*exp(-b*x)+c','independent', 'x','dependent','y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Algorithm = 'Trust-Region';
opts.Display = 'Off';
opts.MaxFunEvals = 100;
opts.MaxIter = 100;
opts.Robust = 'LAR';
opts.Lower = [-Inf 0 -Inf];
opts.StartPoint = [0.35 0.05 0.90];
% Fit model to data.
[FitResult,~] = fit(xData,yData,ft,opts);
output = FitResult.a;
end
functionHandle
) или нет. Вы должны написать эту функцию так, чтобы она допускала вводR
xC
x8
и выдавала выводR
xC
xN
, гдеN
— количество подходящих параметров. То есть векторизация должна выполняться внутри функции; это не может быть сделано снаружи. Извне вы можете использовать функцию только в цикле. Обратите внимание, чтоarrayfun
похож и имеет сравнимую производительность с цикломfor
. - person Luis Mendo   schedule 09.07.2020functionHandle
, которая, как я полагаю, является написанной вами функцией. Вы должны объяснить, что делает эта функция, возможно, опубликовать (соответствующую часть) ее текущий код, и, возможно, кто-то сможет найти способ его векторизации. - person Luis Mendo   schedule 10.07.2020functionHandle
. Большое спасибо. Кроме того, извините, я имел в виду, что если вы опубликуете свой первый комментарий в качестве ответа, я приму его, поскольку это отвечает на вопрос, который я изначально задал, и на самом деле я не понимаю, как я могу векторизоватьfunctionHandle
. - person Rohit   schedule 10.07.2020fit
, похоже, вы не можете векторизовать, потому чтоfit
принимает один набор входных данных за раз и создает соответствующий вывод. - person Luis Mendo   schedule 10.07.2020inputArray
на самом деле является изображением, и мне нужна выходная карта, представляющая коэффициент. Даже относительно маленькое изображение256
x256
вычисляется примерно за 2 часа, а у меня есть изображения1024
x1024
, которые также нужно запустить. - person Rohit   schedule 10.07.2020ft = fittype(@(a,b,c,x) a*exp(-b*x)+c)
. - person Cris Luengo   schedule 10.07.2020