首页 > 解决方案 > 通过 PARAFAC 分解对不完全张量进行平滑建模 - Matlab to Python Conversion

问题描述

我正在尝试将Matlab代码转换为Python3代码:SPC matlab code

代码(我想转换为 Python 的 Matlab)

我坚持以下(突出显示令人困惑的部分):

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

分析

根据我的分析,RHSscore(ai) = ...是一个向量,但score(ai)只是矩阵/数组中的一个元素。因此,在 for 循环之后,score将有 6 个长度可以变化的向量元素。

问题

在下面的:

[object2 ai] = min(score);

看起来object2并且ai只会分别是浮点数和整数。但是,我很难理解这是如何实现的,min(score)因为score有许多 6 个不同长度的向量元素。

如果有人可以解释这一点,将不胜感激!

标签: pythonmatlab

解决方案


推荐阅读