找回密码
 注册
查看: 343|回复: 3
打印 上一主题 下一主题

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!
    , S, A# p0 \, Y4 l1 u# ~clear) b6 A  ?1 Q' E" w9 ]+ [1 s
    K=100;
      Y/ W% c) r8 m5 A# }S=500;
    & {; S7 b5 ^3 [G=rand(K,K,S);                %G为K*K*S维的矩阵" A6 ]" R1 S9 O
    for t=1:S5 C# C) P9 B8 H. [& M& `' q( ^2 D+ ^0 Y
         for m=1:K8 V; l, p$ b4 b$ h$ L5 M' _9 K
              for n=1:K
    % P7 M& w0 w! r6 H. U8 Q3 c               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置/ r! s9 t! }4 R7 ~( L: _8 w) ?
                   E(m,n,t) = sum(I,1:2) ;! E2 A5 j3 K% G
              end
    % i& o( |* L7 @1 u8 |) w3 u& Z     end
    4 T# r7 a. B& m- h1 z  send
    - _* o0 N( H" V( B& @' W2 d# O/ G+ V: ]: Z9 I  M

    1 P- F9 ?; ]( h3 U
  • 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:120 q; ]) Q0 _  R6 f0 u' N* u
    你这转置了,维度不一样,代码直接错误呀。
    ! z4 m5 ]& b! F
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    0 N) w: ]9 ^( k0 r: G# h
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    2 ?. B. @+ O. k! w+ Tfor t = 1 : S
    ' ?, i) W9 r8 B4 x" u    for m = 1 : K. _9 N0 _# N. H* e% m3 D
              for n = m : K( Y! y, L, j+ S! r/ N4 f1 i6 \3 Z/ o
                  E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;
    9 N5 y6 C7 c* l* n3 P9 q/ R1 X. d              E2( n, m, t ) = E2( m, n, t ); % 对称性
    ; B0 l6 }0 \( f7 v. |2 s3 G          end
      R0 q2 _8 n3 f4 c% r    end) K0 }) g# j2 M( I
    end
    7 n4 F& _; E; r3 q4 R当然更简单的方法是根据规律直接计算每层& C: Z5 k6 r2 Q0 t. T# T3 d: j
    for t = 1 : S
    $ ^, S( u  [! j6 ?, h    M = sum( G( :, :, t ) ).' * K * ones( 1, K );* N+ o; x9 D8 V; d
        E3( :, :, t ) = M.' + M;
    $ G& I$ T: F3 Q; y! d. s" W4 Uend. V  j+ \) B; J7 o. Q
    在K = 50; S = 20; 时
    - |- f+ P, X- h7 ]原始计算方法历时 1.852707 秒。4 {# Y% K( B4 ~: @& D5 [% M
    利用对称性计算,历时 0.274421 秒。
    ( x1 c5 K5 t& K' a& i- _利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-5-23 18:51 , Processed in 0.093750 second(s), 27 queries , Gzip On.

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

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

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