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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!! v( A! s% [1 Z4 {/ {3 o
    clear5 R5 N+ k# J4 D& n& ^3 T1 Z
    K=100;( `% b. X" g0 Z9 C% O4 M
    S=500;' \2 H" Y, N' f6 a
    G=rand(K,K,S);                %G为K*K*S维的矩阵$ |+ Q, R. {4 z6 u- I, A
    for t=1:S3 P5 d1 d8 G8 T% P1 m; c, z0 W" t
         for m=1:K
    ; c0 J: s9 r$ U3 P9 N          for n=1:K! ^) M9 T. m  r2 {
                   I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置* A9 S# r+ p7 ^; T# c
                   E(m,n,t) = sum(I,1:2) ;
    % m/ I4 V9 P6 o1 J, S0 D. o          end
    ' |5 c# ^( L4 M" E     end) `0 |  Z+ n1 Z* R' w9 D
    end. s* b$ r$ }. \5 R, {- v" w6 A
    % }0 j- A  g& }. a
    " _; ]5 W. O" R
  • 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
    . A$ ^$ V, I0 G/ L$ q你这转置了,维度不一样,代码直接错误呀。
    4 a! W- A3 d+ B" I" b2 F+ Y# A
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    : d. n/ Z+ ^! f
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    + O4 j4 ^/ d/ H, _" w; D, ^for t = 1 : S
    $ w' A  W& h: H& c" i    for m = 1 : K) R7 H; A+ c! E; z% m! J
              for n = m : K
    , f4 ?, w. D) o2 X" b              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;
    4 S' _+ z) [- w5 f! z              E2( n, m, t ) = E2( m, n, t ); % 对称性
    + i5 S1 t3 v1 Y. l6 \  J  D          end* f8 r3 x' M5 f  d: w
        end
    9 m+ G! m  c( a( b# uend4 T) b( O" T0 V
    当然更简单的方法是根据规律直接计算每层4 ]" E# X7 d# T/ h, f1 x9 L: n
    for t = 1 : S6 ~1 ]% N6 c3 L3 W3 _5 p
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    5 V9 H* t& @- i' |    E3( :, :, t ) = M.' + M;
    ! ?- n( ^3 K0 x; kend. f7 d6 w  j. g! A4 f' o5 a
    在K = 50; S = 20; 时
    2 l; n( c0 W/ _1 v* M  Y/ J原始计算方法历时 1.852707 秒。  b- I4 c: m6 o. c% _/ {& W
    利用对称性计算,历时 0.274421 秒。
    6 V0 L  {1 b- h! p" N* Q/ o" n利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-9 00:52 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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