gpt4 book ai didi

没有循环的Matlab矩阵运算

转载 作者:行者123 更新时间:2023-12-02 09:38:07 24 4
gpt4 key购买 nike

我在执行某些数组操作的代码时遇到问题。它变得太慢了,因为我正在使用循环。我花了一些时间尝试优化此代码并用更少或没有循环来重新编写它。到现在还没有成功。你能帮我解决这个问题吗:

YVal = 1:1:100000;
M_MAX = 1000;
N_MAX = 2000;
clear YTemp
tic
for M=1:1:M_MAX
for N = 1:1:N_MAX
YTemp(M,N) = sum(YVal (N+1:N+M) ) - sum(YVal (1:M) );
end
end

对于大型N_MAXM_MAX,这两个循环的执行时间非常长。我该如何优化它?

谢谢!

最佳答案

假设YVal大于N_MAX+M_MAX

sum1 = cumsum( YVal(1:(M_MAX+N_MAX)) ); % sum1(M) = sum(YVal(1:M))

如果我没记错的话,那么

sum( YVal( N+1:N+M ) ) = sum1( N + M ) - sum1( N )

因此

YTemp( M, N ) = sum1( N + M ) - sum1( N ) - sum1( M )

使用 ndgrid

[M N] = ndgrid( 1:M_MAX, 1:N_MAX );
YTemp = sum1( N + M ) - sum1( N ) - sum1( M );

我说得对吗?

编辑:
另一种没有 ndgrid

sum1 = cumsum( YVal( 1 : (N_MAX+M_MAX) ) );
YTemp = bsxfun( @minus, ...
bsxfun( @minus, ...
sum1( bsxfun( @plus, 1:N_MAX, (1:M_MAX)' ) ) , sum1 ),...
sum1' );

关于没有循环的Matlab矩阵运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com