全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
995 2
2014-03-22
for i=1:brand_num
  for j=1:brand_num
   s=0;
     for k=1:user_num
       s=s+(A(i,k)*A(j,k)/ku(k));
     end
   w(i,j)=s/ko(j);
  end
end

[size=14.285715103149414px]这段程序效率很低,请问怎么提高运行效率。是不是可以矢量化编程……急
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-3-25 11:53:30
矢量化肯定会加快很多。
实在不能矢量化,可以小循环在外,大循环在内
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-25 12:17:41
clc;clear all
A=rand(200,300);
[r1,r2]=size(A);
ku=rand(1,r2);
ko=rand(r1,1);
w=zeros(r1);
w1=zeros(r1);

tic
for i=1:r1
    for j=1:r1
        s=0;
        for k=1:r2
            s=s+(A(i,k)*A(j,k)/ku(k));
        end
        w(i,j)=s/ko(j);
    end
end
toc

tic
for i=1:r1
    for j=1:r1
        s=sum(A(i,:).*A(j,:)./ku);
        w1(i,j)=s/ko(j);
    end
end
toc

isequal(w,w1)
运行结果:
Elapsed time is 2.092196 seconds.
Elapsed time is 0.169971 seconds.
ans =
     1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群