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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    疑问:请看下面的代码,请问有没有办法不使用循环语句而达成相同效果,使用循环语句效率太低了。感谢!! z! y7 ?) Q/ i0 W+ U+ F
    clear, j2 Y; P/ ^$ s; d
    K=100;9 A/ m  F! L/ t6 ^6 I! e; n2 k2 L
    S=500;
    5 i; A+ L4 R) t: z' J) ^7 S9 lG=rand(K,K,S);                %G为K*K*S维的矩阵* T8 X. F2 f9 H2 O# I
    for t=1:S
    . m! A# u, \! P- n     for m=1:K
    4 z  h  q, K- y0 i! Z2 d; \5 Y, u          for n=1:K1 O; e* B3 [* v5 u4 W
                   I=G(1:K,m,t) + G(1:K,n,t)' ;        %注意第2项的矩阵G取了转置
    , O* P: h2 ~  o; X5 j0 A  Z4 C               E(m,n,t) = sum(I,1:2) ;
    $ I9 A* U1 }6 j% x: _" P1 A          end& P: w1 S- [! @! D" ]  a
         end
    ! ?9 E) \* j- D' hend2 p4 L% f3 Z$ k( [4 ?5 p
    8 M9 Q1 R9 w5 m7 g
    " T4 \  J; Y, _# f; F
  • 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' ?' i) f: w" [0 X, H7 J* V5 ?
    你这转置了,维度不一样,代码直接错误呀。
    $ A* L! [/ L5 C2 K7 _
    没有错误的,因为我需要做这个转置,I确实是需要这样的操作,以上循环可以运行。想问问有没有不需要用循环的方法。
    5 E" `& j4 F0 R) y
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2023-1-6 15:22 | 只看该作者
    你的矩阵每层都对称,利用对称性,哪怕全写循环嵌套,也可以省大约一半的计算量。
    : F$ f" i) d: p3 z3 d) Vfor t = 1 : S
    4 @; ?5 y0 |0 q, X" k% j    for m = 1 : K, V1 j& `4 y9 q3 B) u
              for n = m : K
    1 t! h5 M/ m8 J5 l2 ?              E2( m, n, t ) = ( sum( G( 1 : K, m, t ) ) + sum( G( 1 : K, n, t ) ) ) * K;
    ! Q5 G3 O1 Q/ D- s1 K              E2( n, m, t ) = E2( m, n, t ); % 对称性
    6 K. ~9 a. e% ~) S9 L* X          end
    ! x: d6 [! d' q: a4 t+ e& ]    end& ^  w3 c, C' ?
    end
    , ]/ u5 D( i9 h" t: h& A6 t/ \当然更简单的方法是根据规律直接计算每层
    5 E9 F# I0 N: H7 d. Kfor t = 1 : S& _1 r2 v8 j5 o/ S$ @( t
        M = sum( G( :, :, t ) ).' * K * ones( 1, K );1 h2 X4 @4 E. V$ L
        E3( :, :, t ) = M.' + M;
    ) R. @, m2 C! B; h8 cend
    7 w. V- h  J# `% J( Z3 V! Y在K = 50; S = 20; 时
    3 i3 E" v- s/ C# C原始计算方法历时 1.852707 秒。& F/ k+ R3 e2 m/ o- p- [5 L7 Q: k# T
    利用对称性计算,历时 0.274421 秒。
    ; N9 H6 T  ^- k8 M: C; h利用规律逐层就散,历时 0.005905 秒。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-1 12:57 , Processed in 0.125000 second(s), 28 queries , Gzip On.

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

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

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