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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!+ r1 }  |; d4 Z
    clear
    . d: k, l; I- _5 H' b& H$ sK=100;) L9 G2 Y' I6 I
    S=500;
    - R. h& B! d4 WG=rand(K,K,S);                %G为K*K*S维的矩阵+ d# M* d/ _' U$ g9 D
    for t=1:S
    : m- ]& s* C1 ~: @2 n     for m=1:K5 Q  p" H( q* x
              for n=1:K
    + H9 j  f2 A8 i6 ]8 J  I& q9 C               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置4 F; ?( f1 x. O+ }8 z
                   E(m,n,t) = sum(I,1:2) ;
    " M4 E7 q/ }" t/ I6 T0 o# z          end6 N$ h9 l& B1 p' n; g- _
         end
    0 e! m( H) l$ j2 g! @6 pend
    : Y  z, i2 M% D& y7 g* J" O* c% |2 q# z2 Q" O

    ; e2 Y4 f- S) n" E
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。, r& [$ y' H/ K
    for t = 1 : S
    ! T, x3 ~2 R" m: m. i    for m = 1 : K
    ) Z( N3 x& Q0 W5 c" ]$ U          for n = m : K
    ) J* g) S3 r; U8 o2 ^" E7 f  U6 C. `              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;' k0 j$ Z8 s& n- D. [6 ~  ~
                  E2( n, m, t ) = E2( m, n, t ); % 对称性3 Q* {& D, v& m- T2 I
              end( |1 s. E! M: s! L: V1 b
        end/ ?; X! N0 m8 ?0 G/ o$ ~# U
    end
    3 x0 T1 a9 Y1 w1 H当然更简单的方法是根据规律直接计算每层8 l( S2 Y; g* {! `9 T1 w
    for t = 1 : S: ?2 @9 V* U: d* h+ E: g* T9 i
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    . U) G  B8 H3 O2 E    E3( :, :, t ) = M.' + M;
    , R) N' p' }: i8 e9 V+ lend1 N5 _( [9 _  v5 r6 ^
    在K = 50; S = 20; 时
    - L( I( l4 u4 C% p0 i( X3 D原始计算方法历时 1.852707 秒。% Y" Y+ ^2 b4 d) _8 \
    利用对称性计算,历时 0.274421 秒。
    & C, l" f: Z7 Q3 A* K! Y利用规律逐层就散,历时 0.005905 秒。
  • TA的每日心情
    奋斗
    2022-1-21 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
     楼主| 发表于 2023-1-6 15:17 | 只看该作者
    I_believe 发表于 2023-1-6 15:12
    9 i3 _( j  M  H- R/ ]3 T你这转置了,维度不一样,代码直接错误呀。
    6 i6 ]+ j! u# ~0 z9 O
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。5 |% _3 a0 d0 B. {( k5 B7 K9 B: \
  • TA的每日心情
    开心
    2022-1-29 15:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2023-1-6 15:12 | 只看该作者
    你这转置了,维度不一样,代码直接错误呀。

    点评

    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。  详情 回复 发表于 2023-1-6 15:17
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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