Я довольно новичок в MATLAB, и я изо всех сил пытаюсь найти решение этого уравнения.Улучшение производительности кода для решения уравнения
где размеры матриц являются {λ} = N × К, {Y} = N × D, {π} = 1 × К, а {μ} = D × К.
То, что я создал, больше похоже на чудовище, чем на эффективный код MATLAB, и это связано с серьезным недостатком навыков MATLAB.
На самом деле, я решил решить это шаг за шагом, чтобы ознакомиться с тем, как работает MATLAB. Я закончил с ультра-неэффективным кодом, который я даже не могу его комбинировать. Даже конечный результат неверен, так как я хочу создать матрицу NxK. Любое руководство будет высоко оценено.
%Dimensions:
nn = 10;
dd = 7;
kk = 5;
%Initial variables:
lambda0 = rand(nn,kk);
sigma = rand(1);
Y = rand(nn,dd);
mu = rand(dd,kk);
%Calculate pies:
First_part = log(pie(:)./(1.-pie(:))); % Kx1 vector
%Calculate Second part:
for n = 1:nn
for d = 1:dd
lambda_mu(d,:) = lambda0(n,:).*mu(d,:); %lambdamu is a DxK matrix
end
lambda_mu2(n,:) = sum(lambda_mu,2); %This is a NXD matrix
end
%Y-lambdamu2:
for n = 1:nn
YY(n,:) = Y(n,:)-lambda_mu2(n,:); % This is a NxD vector
end
%YY*mu:
Second = (YY*mu)./sigma^2; % NxK
%Third:
Third = (mu'*mu)./2*sigma^2; % KxK
%Final:
for n=1:nn
Final_part = transpose(First_part(:))+Second(n,:)-Third;
end
Update 1: Хорошо, я должен сам пиво. Итак, я сделал некоторый прогресс, чтобы создать матрицу {λ} = N × K, изменив код следующим образом:
Обновление [2]: Проводите слишком много времени программирования, и вы пропускаете детали. Я исправил ошибку, поскольку я установил {Y} = D × K вместо {Y} = D × N.
%Dimensions:
nn = 10;
dd = 7;
kk = 5;
%Initial variables:
lambda0 = rand(nn,kk);
sigma = rand(1);
Y = rand(dd,nn);
mu = rand(dd,kk);
pie = rand(1,kk);
sigma = rand(1);
%Calculate the equation.
for n = 1:nn
for k = 1:kk
lambda(n,k) = log(pie(k)/(1-pie(k))) + (transpose(Y(:,n)-...
(sum(lambda0(n,1:end ~= k).*mu(:,1:end ~= k),2)))*mu(:,k))/...
sigma^2 - transpose(mu(:,k))*mu(:,k)/2*sigma^2;
end
end
Но теперь проблема заключается в том, что она идет только до п = 5, когда я пытаюсь цикла при п = 6, например, я получаю следующее сообщение: «Индекс превышает размеры матрицы», так что практически я только получить матрицу 5 × 5. Предложения, пожалуйста?
P.S: Я даже попытался изменить лямбду от лямбда (n, k) до лямбда (k, n), но результат тот же.
Спасибо за корректный вопрос, я не понимаю, почему кто-то отказался от него - незаслуженно. К сожалению, я в настоящее время не в состоянии помочь, но висеть там, кто-то придет. –
Вы уверены, что указаны размеры? Кажется, это не так много для меня. Можете ли вы рассказать о том, что такое уравнение? Я хотел бы помочь, но то, что происходит на заднем плане, для меня немного загадочно. –
Hey @RodyOldenhuis благодарит за изменение! – Jespar