找回密码
 注册
关于网站域名变更的通知
查看: 390|回复: 3
打印 上一主题 下一主题

如何用Matlab矩阵运算代替这个循环语句。

[复制链接]
  • TA的每日心情
    奋斗
    2022-1-21 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2023-1-6 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!# o. j6 ~& B8 r' r/ t% j4 s$ ^& C
    clear
    $ Q* [: g, D" p# C! E: ^  T% ]6 FK=100;
    - M7 L" r. V/ }! a- Y8 U5 kS=500;" M# z' c! R, t* }; z/ n2 ~) g, b
    G=rand(K,K,S);                %G为K*K*S维的矩阵7 V, s' m, j% j
    for t=1:S
    - r' j- Z5 ^' O     for m=1:K
    ! V1 W$ g! y; }3 [* G- J          for n=1:K
    0 Y% [3 O- @7 }8 |7 {7 J8 L3 c1 ?               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置
    # a4 P& p! E$ i2 v3 S               E(m,n,t) = sum(I,1:2) ;" S2 e3 x* V6 @& B/ P4 G3 u8 M# C
              end
    ( C& r/ O* M9 P+ F8 X& a     end4 T; T- t0 S3 F7 V
    end
    ( A! Z( f2 ~! L- Y9 E1 Z6 U9 h
    & K# j& K9 h& E1 b$ G  V: W! P+ j3 V/ o* P
  • TA的每日心情
    开心
    2022-1-29 15:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2023-1-6 15:12 | 只看该作者
    你这转置了,维度不一样,代码直接错误呀。

    点评

    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。  详情 回复 发表于 2023-1-6 15:17
  • TA的每日心情
    奋斗
    2022-1-21 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
     楼主| 发表于 2023-1-6 15:17 | 只看该作者
    I_believe 发表于 2023-1-6 15:12
    # n+ ]% \* y0 n7 O& q6 z你这转置了,维度不一样,代码直接错误呀。

      e8 q* m& W, o' g7 B  [; K没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    7 {; g- a2 {" v  x
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    $ i1 ^1 w- N% A7 M* bfor t = 1 : S2 i% ]. C2 [6 f
        for m = 1 : K1 k* E- c5 q* ~1 ]3 Y
              for n = m : K7 O9 X6 _% V* T1 J
                  E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;. r& l5 t+ \2 Z$ z+ c
                  E2( n, m, t ) = E2( m, n, t ); % 对称性
    % l+ T, P2 o1 h7 k: ]- @          end  M3 h1 R; R8 c! ]! W
        end; s; i3 E2 n# E
    end( }; b. }% k# s9 O* `$ O% e- ?
    当然更简单的方法是根据规律直接计算每层- f3 o' o" O9 E  l8 X- G, t
    for t = 1 : S
    ' Z: Y2 L6 R$ W( x# c, @& }    M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    ! K& V& i; S- @$ j    E3( :, :, t ) = M.' + M;3 i" N' S; n. @6 G, g
    end
    ) w% s7 G$ M# w9 ]4 h在K = 50; S = 20; 时4 G  v' z6 U: a3 O- t. X; k
    原始计算方法历时 1.852707 秒。
    $ K- M: z- q, f+ ]0 d* `6 _2 |利用对称性计算,历时 0.274421 秒。5 M) k+ ?, \6 o5 s+ P$ g% c: N' a
    利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-24 09:20 , Processed in 0.140625 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表