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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!
    3 q& D2 f! L$ Aclear- F$ R7 S! Q& L3 w
    K=100;
    6 Y# m$ ^5 M* N0 IS=500;: Q2 Y( E9 f' t$ g) w( U4 T! t4 N% g
    G=rand(K,K,S);                %G为K*K*S维的矩阵8 Y* E+ H5 G/ c5 T7 w/ L) L2 \
    for t=1:S+ _+ ~9 B4 Z5 p5 z/ J4 P
         for m=1:K
    . n; d/ Y, d* R4 _# |) |+ ^          for n=1:K
    4 e' K% i4 S( J               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置/ M' [) o5 I: V% r, z+ k4 R3 N
                   E(m,n,t) = sum(I,1:2) ;
    # N6 B* S) h+ B          end
    4 D+ I( O8 y, h0 }9 {     end8 j+ V4 M' h. q6 I# [5 E
    end
    6 R. a* M& R. q3 Z/ T
    6 V) f9 F! Q/ Z, D) f* g, p) j8 \' @& j$ \4 }3 v
  • 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$ B9 L; y4 E  M4 v
    你这转置了,维度不一样,代码直接错误呀。
    ' |) z* K4 I0 I  B& W4 B8 B
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。. @' J4 b8 c" \
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。  U: C: U/ R* B5 k) G0 W
    for t = 1 : S
    2 c& R/ c% j/ Q: o; i    for m = 1 : K
    : k3 Z  Z" z) n+ \! e8 I/ m          for n = m : K
    ) M2 n' r3 [4 w  P7 j0 Q! G9 i) J% @              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;
    ) r  h. p4 |$ J. F$ r+ W1 ~* L              E2( n, m, t ) = E2( m, n, t ); % 对称性. F% ~; C: T; N
              end+ v+ f7 A. t+ Q: {
        end
    2 x7 R  M( c3 j7 E( k$ Eend) S+ W5 N6 s" c8 q
    当然更简单的方法是根据规律直接计算每层* f) X5 ~' r3 T: a$ ^% B, C3 X
    for t = 1 : S6 N! r& h) s) \1 X) I. V
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );" m) n7 g6 z5 G" p
        E3( :, :, t ) = M.' + M;
      |4 q  i' _" T( h/ [end
    : x1 v7 q/ W; L( K" e& P在K = 50; S = 20; 时
    : }) S0 D" z$ G! d- ^# j' D" P原始计算方法历时 1.852707 秒。
    * b9 }( ]! e5 v0 n* o7 Z1 D利用对称性计算,历时 0.274421 秒。- S. C) [4 H; o. K2 a2 f
    利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 17:40 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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