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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!
    0 o  ]* x) K3 B  l, n9 bclear* o* H6 q9 A1 P  y
    K=100;6 r+ }- N4 ]* W; b( _- T# {9 _
    S=500;
    + n3 X% Y" [6 q" s7 J: j0 gG=rand(K,K,S);                %G为K*K*S维的矩阵
    5 v3 v5 O5 A6 u: `: Q5 Xfor t=1:S4 }, _4 F* ?  \  P# ^3 \
         for m=1:K1 v  n+ Q9 p" V! v" ?& p0 C
              for n=1:K
    . b" \! R! r# @* t6 i               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置
    , y+ H) Q" C# v- B8 K  g               E(m,n,t) = sum(I,1:2) ;- E3 A, H$ f. T5 G
              end
    ; u( E) l% E+ i7 \     end
    2 d8 P! n+ f( N7 z' e. t- Kend
    0 I8 n3 E8 ]; u& Q' R4 }( r: o/ j- F* F. P8 J

    # ~" v9 t  y( e% ?% 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:12+ d, q/ [% h! z8 m  X; ?  q) j, j
    你这转置了,维度不一样,代码直接错误呀。

    8 p; {9 \  @' M% Y  `没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    6 h/ _% A: z$ Z( J
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    ; M8 h# n& Y3 E5 B! _8 k: Efor t = 1 : S
    " G9 V" f. V2 u$ R. l    for m = 1 : K* V  h- V4 @4 e6 G8 U8 M
              for n = m : K6 s3 q0 H3 k6 s+ @9 @) x5 `( Q
                  E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;5 `5 T- ?) R7 v# I7 Q+ d: N$ B8 ~
                  E2( n, m, t ) = E2( m, n, t ); % 对称性
    ' V4 F! n8 Y" O/ _1 V          end
    - Y7 q% F6 B. \    end
    ; A, g. u. i1 v* a* vend
    6 o, Z% g8 I  [: M2 S4 ?% S; D当然更简单的方法是根据规律直接计算每层# L1 f: a$ Q, S
    for t = 1 : S
    7 |' T8 X: h1 _. h3 X5 B    M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    6 u/ r. T" i; |  m0 ^    E3( :, :, t ) = M.' + M;
    . t7 b! F+ u; ?. G/ u; d2 T/ o. tend4 |" A$ b; K8 u. g* i. e4 |8 n$ {
    在K = 50; S = 20; 时
    - w# G! q* S; ?, i原始计算方法历时 1.852707 秒。
    . d. b/ b. b- t& L, Z- l利用对称性计算,历时 0.274421 秒。7 E3 b3 q, s) F3 Y9 N
    利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-6 02:08 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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