python - 通过 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 个不同长度的向量元素。
如果有人可以解释这一点,将不胜感激!
解决方案
推荐阅读
- java - 为一个 Atrribut java 设置多个值以添加到已过滤的列表中
- node.js - 如何在 Windows 中的公共 IP 上运行 nodejs?
- tomcat - apache tomcat 9中的主要方法在哪里?
- javascript - 如何在前端使用firebase作为模块?
- asp.net - 如何将 Windows Media Player 添加到工具箱
- vim - 如何在 VIM 的行尾按 l 移动到下一行?
- ssh - SCP 超时,但 ssh 连接工作正常。难道我做错了什么?
- android - GestureDetector:长按释放时检测
- laravel - Laravel 5.8 电子邮件验证与多个警卫
- ios - 在 IOS 中使用 tableview 滚动同步选项卡