Я хотел бы перевести функцию matlab в код R. Вот часть кода, в которой я больше всего смущен:
obj = (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u);
ind = 1; iter = 1;
while ind>thr & maxit>iter
oldo = obj(end);
uhat = Pu*double(ttv(Xhat,v,1))'*v;
u = uhat/norm(uhat);
[v,tmp] = eigs(Pv*double(ttv(Xhat,u,3))*Pv,1);
obj = [obj (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u)];
ind = abs((obj(end) - oldo)/obj(1));
iter = iter + 1;
end
d = v'*double(ttv(Xhat,u,3))*v;
1) Первый вопрос со строкой 4 oldo = obj(end)
. Может кто-нибудь объяснить мне этот синтаксис? (Я думаю, что это закончится, пока l oop?). Это также в строке 9.
2) Строка 7: [v,tmp] = eigs(Pv*double(ttv(Xhat,u,3))*Pv,1);
. Я не понимаю, что такое [v, tmp]
. «v» - это ранее определенная переменная, а tmp - нет. Может кто-нибудь объяснить эту структуру данных?
3) Строка 8: obj = [obj (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u)];
. Я не понимаю, какие операции происходят в скобках - например, между «obj» и «(Pv * v) ...» есть пробел, но нет оператора. Скобки действуют здесь как оператор?
К вашему сведению, ttv () - это функция из Tensor Toolbox. Если кто-нибудь может помочь с любым из этих вопросов, это очень помогло бы мне. Я знаю, что это своего рода неопределенный вопрос, состоящий из нескольких частей, но я подумал, что если кто-то ответит на один из них, он сможет ответить на все. Кроме того, если вы просто объясните, что эти строки кода делают в Matlab, не переводя их в R, это тоже будет очень полезно. Полный код доступен здесь: https://github.com/zhengwu/TensorNetwork_PCA/blob/master/hopca_popNet_new.m
Спасибо за помощь!