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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!
    3 @9 b& U" ~9 U" v& n9 Uclear- I- j+ H" d0 m' W7 K0 c
    K=100;, u: _0 u3 c7 ^1 V3 m
    S=500;
    : i0 d2 ~- `9 q# C$ Y: c! l, eG=rand(K,K,S);                %G为K*K*S维的矩阵/ m* \; n  C* w) L) [7 u
    for t=1:S
    4 K3 F. I# r( n2 R; m     for m=1:K
    % \0 \7 |1 M2 _+ a+ [' Q          for n=1:K
    / c9 e; J2 c/ s7 o1 u5 B1 Y3 m               I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置1 a% V) N% A% p+ v
                   E(m,n,t) = sum(I,1:2) ;
    8 S+ w+ a% ?" a- O          end
    4 y/ D: v! _! E$ m+ K' t+ i     end6 ]9 T* G6 o! ~) [7 \6 V2 W
    end
    ; ]+ Y5 R5 k' i+ @5 J& b- r
    7 D6 t1 [# z/ ]& ~
    6 h& l! e% F+ G& j/ x( q# k) y3 G
  • 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
    - E( C. w9 O& B2 M; \你这转置了,维度不一样,代码直接错误呀。

    7 O- U, a/ V) O6 Q, b$ {没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    7 j) z, o7 Y4 h
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。' g" V) p: o8 K  y* E$ N% Q
    for t = 1 : S% R' B) Q$ r) R2 _
        for m = 1 : K
    ( J" `/ S2 s0 C          for n = m : K
    5 y: P, ~  @8 D0 o+ z              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;( I* Y% g& L  [$ x9 ]" |
                  E2( n, m, t ) = E2( m, n, t ); % 对称性
    3 ?5 [) t. g; X          end( `7 J8 T8 ?- K5 a5 B4 Y8 [8 b
        end
    ) `* h& y2 l3 z# Hend
    + ^6 n' {7 m) T当然更简单的方法是根据规律直接计算每层
    3 ], a& A1 Q' z7 `0 h# c! C9 R4 m: @. mfor t = 1 : S' i9 U3 _5 y  }. ~2 [3 J$ p* _% ]
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );
    * l$ F3 g9 |7 O! X* k! Q! f" k    E3( :, :, t ) = M.' + M;
    ) M! ?7 `, X( j& A: W, mend
    & l+ P, _7 D3 I( ]0 W2 f+ `) {, o在K = 50; S = 20; 时
    : W7 Z; a* u8 g3 J原始计算方法历时 1.852707 秒。1 V! B9 E5 t7 l' l! c, ?/ W
    利用对称性计算,历时 0.274421 秒。
    $ h* h5 m+ {, O' e0 t  p利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 20:34 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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