Гладкое моделирование неполного тензора с помощью разложения PARAFA C - преобразование Matlab в Python - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь преобразовать код Matlab в Python3 код: SP C код Matlab

Код (Matlab который я хочу преобразовать в Python)

Я застрял на следующем ( выделенном запутанном разделе ):

if strcmp(TV_QV,'tv') 

      u = innerprod_one_exc(E,U,k,n);
      u = u(:);
      %initilization
      a = u/norm(u);
      % main iteration for constrained version
      object = 0.5*G(k)^2*rho(n)*sum(abs(P{n}*a)) - G(k)*a'*u;
      for nn = 1:1000
        df = P{n}'*sign(P{n}*a);
        dL = (0.5*G(k)^2*rho(n)*df - G(k)*u + G(k)^2*a)/G(k)^2;
        al = [0 0.1 0.01 0.001 0.0001 0.00001];
        for ai = 1:length(al)
          a2 = a - al(ai)*dL;
          a2 = a2/norm(a2);
        score(ai) = 0.5*G(k)^2*rho(n)*sum(abs(P{n}*a2)) - G(k)*a2'*u;
      end
      [object2 ai] = min(score);
        a2 = a - al(ai)*dL;
        a2 = a2/norm(a2);
        if abs(object2 - object)/II(n) < 1e-3
          break;
        else
          a = a2;
          object = object2;
        end
      end
      lam = norm(a);
      u = a/lam;
      U{n}(:,k) = u;
      v{n} = u;
      div  = div + rho(n)*sum(abs(P{n}*u));
.... % code continues on

Анализ

По моему анализу RHS score(ai) = ... является вектором, но score(ai) будет просто одним элементом в матрице / массиве. Таким образом, после for-l oop, score будет иметь 6 векторных элементов, длина которых может варьироваться.

Вопрос

В следующем:

[object2 ai] = min(score);

похоже, что object2 и ai будут только с плавающей точкой и целым числом соответственно. Тем не менее, я изо всех сил пытаюсь понять, как это возможно из min(score), так как score имеет много 6 векторных элементов различной длины.

Если бы кто-то мог объяснить это, это было бы очень признательно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...