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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!& j  V0 l* I1 A" A1 t1 J
    clear
    " \4 a7 P) `) a* GK=100;; [/ `3 H' a0 u, I4 i
    S=500;9 }% k' n9 \( F1 b
    G=rand(K,K,S);                %G为K*K*S维的矩阵" D9 B; r) w/ q+ l$ ?
    for t=1:S; |& Q) C  O" b6 Q+ U" |; z* ~+ |
         for m=1:K* m2 v3 \. `5 |5 B5 {
              for n=1:K
    4 x/ M5 M! ?# ~5 U               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置# |3 K0 c4 _' w5 u% L
                   E(m,n,t) = sum(I,1:2) ;/ n" l/ e: P& Q1 y; j
              end' {; @7 t+ N3 m2 u4 v8 X
         end
    / s9 T5 F8 J( Q3 [6 n9 u9 vend
    9 o6 S2 u+ J5 x9 {+ P0 G: i9 S$ H2 R
    ! h0 `, ~' W; N
    $ f4 H4 F  y& c! y! w0 O& J3 P( k
  • 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) w4 K5 a) }5 Z2 C# X: y* u$ e
    你这转置了,维度不一样,代码直接错误呀。

    7 ]6 Z6 W8 m4 x, z没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    ( w$ v3 `8 H/ v# U: n7 f- k
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    5 R& t' {6 _" l' Cfor t = 1 : S$ U2 F0 C( E3 t5 k- ^. ]5 r  p
        for m = 1 : K6 g1 W& I5 B$ t
              for n = m : K& Q1 X5 C+ ^# }7 ?. l. C& d3 o
                  E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;$ ^: X! \$ V; e# j
                  E2( n, m, t ) = E2( m, n, t ); % 对称性+ u3 P0 X, t  r/ L5 Q
              end
    $ I! f5 t- p" ]5 x/ t8 r4 ^    end" R8 z9 l* G) I6 E( _
    end
    $ `8 Z& |! x$ d$ y- T当然更简单的方法是根据规律直接计算每层
    ) P/ T- C$ J' k0 Tfor t = 1 : S
    ( j, O+ ]" i* e6 j9 s* u3 D    M = sum( G( :, :, t ) ).' * K * ones( 1, K );) N& n8 \$ q; |
        E3( :, :, t ) = M.' + M;) y7 g: _% s% k. W+ Z
    end
    # N) T% J7 f1 r3 w) b在K = 50; S = 20; 时3 u6 ~4 d" x6 |, T$ k: Z% |
    原始计算方法历时 1.852707 秒。
      A  ^5 D) D6 z利用对称性计算,历时 0.274421 秒。
    0 u3 b6 ~6 `5 c" q/ I利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 13:09 , Processed in 0.171875 second(s), 25 queries , Gzip On.

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

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

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