EDA365电子论坛网

标题: MATLAB中怎样加快for循环矩阵赋值运行速度 [打印本页]

作者: tryeverythingop    时间: 2020-10-28 13:32
标题: MATLAB中怎样加快for循环矩阵赋值运行速度
最近需要用Matlab计算数据核矩阵,数据X_joint大小是40000x183,需要40000x40000的核矩阵,编写了下面的代码,但是for循环感觉速度非常慢,有什么办法能改进这个代码吗?) p" n% W7 q" u/ H
K = zeros(40000,40000);
" h- q3 t: g; ~3 j8 S7 Ofor i = 1 : 40000! R- J6 E- J, `5 n) g, Q$ \8 [
for j = 1 : 40000' E; Y3 f( l! L: ~- H, ], [% W
     K(i,j) = exp(-(norm(X_joint(i, - X_joint(j,))^2/c);%求核矩阵,采用径向基核函数,参数c=2000$ V% {7 }9 j8 W4 G& k
end) e& G; Y9 V- |
end
: n* q* [8 x- x6 {, Y
* i; O2 O, B+ ~) w
) s7 o0 e7 z( [+ k7 M+ x0 w! k( i
( w( Z8 h6 s  ^

8 t( S: s" r! [* B8 W/ f; s+ C
) r. N. _  a6 r% N9 o3 l0 Q* N$ T
作者: qq666888qqw    时间: 2020-10-28 14:23
形如 norm(X_joint(i, - X_joint(j,) 的项,实际上对于 i, j 是对称的,这上面可以省掉一半运算步数,对角线是零,你只需要计算上三角或者下三角就够了。
2 L  ?1 E5 C, W& Y但本身两层循环的步数实在太多,而且每次都要计算两个183维数据的差再求模,除非你能预先通过其他评估,把183个维度合并或者降低到远小于此的维度,不太容易改进了。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2