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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!1 K  N! G) O0 X( ~) |2 {# l  |
    clear8 @( _% R0 {& B' y/ K/ |4 y/ ?
    K=100;0 ~) p& v& n" |  h8 T( [2 g
    S=500;  _8 |: o" s$ p- `4 ^  ?: L9 y
    G=rand(K,K,S);                %G为K*K*S维的矩阵
    3 Z# r6 ~/ |2 Z4 @1 f6 Rfor t=1:S
    9 F+ ^: L1 ^1 \, d4 O9 W     for m=1:K
    0 X- Q# r6 J4 ~, \" c          for n=1:K7 ^2 a1 C2 a5 V, [6 A* _$ P! A
                   I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置
    & @/ V. i& ^, o0 H4 [               E(m,n,t) = sum(I,1:2) ;
    ' ^) J$ U+ j& A) a( }          end% n6 _3 l6 i4 S6 Z1 K2 X1 e' {4 {
         end) R, o  y$ ?9 K) ~% U' _, c; |
    end5 E: S, i2 V$ H$ r1 E1 I) c- H

    9 x2 E, j5 N  k7 ]" q/ y! M: w
    + n% p; {. V) P' _; C- Q/ W
  • 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  d1 B2 }) j$ z9 a/ Z" f
    你这转置了,维度不一样,代码直接错误呀。
    ' B, \& ~3 P& F) j& ~
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    : _* B2 y3 i6 U9 S
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。. D* A7 ^$ o0 U* a
    for t = 1 : S
    1 U% C. T3 g' R    for m = 1 : K
    , F/ Y% ]# d7 U! U3 T          for n = m : K# ~. l" i# F! y. x7 [% I9 y4 U/ n& m
                  E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;2 O& x* h4 C! q/ O7 f9 x4 a
                  E2( n, m, t ) = E2( m, n, t ); % 对称性6 z, i; K3 e" c" p6 V* t
              end
    9 F8 Y% a" ?  z# N    end7 i- d2 t# o& w% |: J; K& E" w
    end  [0 Q1 B% \4 t1 @4 y# t8 z" P
    当然更简单的方法是根据规律直接计算每层/ v6 Y7 \" b" A* M1 v+ d
    for t = 1 : S) X- N9 s. v, F6 p% a7 D
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    & v: ~; N, b& D4 Z' g    E3( :, :, t ) = M.' + M;
      }8 o+ H! O* l4 c9 I# Kend
    ; o5 K. X" D, h) M8 h$ K在K = 50; S = 20; 时
    : A7 Q5 N+ k3 X, d- H原始计算方法历时 1.852707 秒。
      e- s' S; ~# C利用对称性计算,历时 0.274421 秒。
    + H. @* [* m/ j) r利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-4 11:20 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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