楼主: mydaoqq
1017 2

[问答] 求助大神们 这个循环怎么提高效率 [推广有奖]

  • 0关注
  • 0粉丝

初中生

28%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
72 点
帖子
8
精华
0
在线时间
10 小时
注册时间
2012-3-19
最后登录
2017-11-28

楼主
mydaoqq 发表于 2014-3-22 16:24:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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]这段程序效率很低,请问怎么提高运行效率。是不是可以矢量化编程……急
二维码

扫码加我 拉你入群

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

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

关键词:求助大神 高效率 brand rand User 程序

沙发
mklyzl 发表于 2014-3-25 11:53:30
矢量化肯定会加快很多。
实在不能矢量化,可以小循环在外,大循环在内

藤椅
mklyzl 发表于 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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 13:12