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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!
    / G& u$ s: ^( d  n* u2 eclear
    2 v/ _+ ]' |) S9 q, MK=100;$ q9 p& {- u! W3 R  k
    S=500;
    ! v, T" |+ q6 E: L0 \# @/ A$ y" eG=rand(K,K,S);                %G为K*K*S维的矩阵
    " \7 W0 E1 b2 b# `9 o. C2 a: pfor t=1:S
    / [; _9 R. ?/ A, u1 p! A9 R     for m=1:K- {$ ^" d3 b9 X) H& S
              for n=1:K0 k5 g6 t, [. r8 u
                   I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置
    , Z! t3 D* P  _; H( [6 H               E(m,n,t) = sum(I,1:2) ;5 p* ^: X: {1 m  b2 D9 a
              end
      K7 J+ @) |. Z     end
    0 D6 Z% \0 B! B1 _& G+ p  m8 P6 |end
    % L* F; r' ?) H
    0 Y2 @% F! Q* S0 f. Z# |  b
      {) t3 e$ u. o" x
  • 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
    + u; R6 X/ h8 X4 B) _$ K+ X你这转置了,维度不一样,代码直接错误呀。

    : C; C3 H; ^7 V, z. j- k0 @, O没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。; R+ c  {4 x* [+ v. d" c& U( E
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    ( h6 ?6 C) X# P: Ffor t = 1 : S' H0 Y: S9 e  G" D* m+ k" E
        for m = 1 : K3 }- @3 M8 k, ^! I; S- z0 O0 Z
              for n = m : K
    - @: H2 i  N+ N5 p              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;
    4 N# S7 `$ u: f1 u+ z              E2( n, m, t ) = E2( m, n, t ); % 对称性; g7 c& S+ M0 _$ _6 o! D
              end0 c# |/ T0 a) @& {2 S
        end; J$ k% F7 a3 y9 U; c( S
    end% s9 ?9 E! }8 k! b) u9 U
    当然更简单的方法是根据规律直接计算每层9 J. M' K* i4 z$ M; v! B* D
    for t = 1 : S+ D5 \6 q- |0 b2 d4 w
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    - I9 E2 _/ ^/ v0 `" S9 I2 c# |! F    E3( :, :, t ) = M.' + M;
    - j+ i" ?' n( R' y" h* wend
    " s+ j3 m2 A, V在K = 50; S = 20; 时
    . p2 H( k/ K. y2 u- ?$ e原始计算方法历时 1.852707 秒。
    . l! @1 `) q0 G! o% L& y利用对称性计算,历时 0.274421 秒。5 r8 V- W$ h% p# z
    利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-15 15:40 , Processed in 0.093750 second(s), 27 queries , Gzip On.

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

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

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