Re: [求救]三重迴圈

看板MATLAB作者 (Veritas)時間7年前 (2017/11/16 04:24), 編輯推噓1(1013)
留言14則, 3人參與, 7年前最新討論串2/2 (看更多)
※ 引述《MarchinOn (寶寶不說)》之銘言: : K、N為已知且固定的數值 : R_m_theta是一個用來儲存資料的0矩陣 : 程式碼如下 : for m=1:K*N-1 : for n=1:K*N-m : for theta=1:K*N-n-m : if n+theta<K*N & n+m+theta<K*N : R_m_theta(m,theta)=R_m_theta(m,theta)+conj(Rx(n+theta))*Rx(n+m+theta); : else : break : end : end : end : end : 這個三重迴圈有辦法用甚麼方法寫成比較好嗎? : 目前在K*N=512都要跑個幾小時實在是很久 : 想請問大家有甚麼建議或方法嗎? : 謝謝大家! y_{i,j}=conj(Rx_i * Rx_j) R_{m,\theta} = \sum_{k=\theta+1}^{KN-m-1} y_{k+m,k} 可以看得出來是對y這個矩陣沿著diagonal的不同band做cumsum 如果 size(Rx)==[KN-1 1] 先做出y y = conj(Rx)*Rx'; 沿diagonal取出不同band,這邊我們只需要上三角部份 [y,d] = spdiags(triu(y,1)); 這邊要特別注意的是,如果某條band全是0,spdiags就不會取 Y=zeros(K*N-2,K*N-2); Y(:,d)=y; Y(:,end)=[]; 做cumsum Rx = cumsum(flipud(Y)); Rx(end,:) = []; Rx = flipud(Rx).'; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.54.158 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1510777488.A.057.html

11/18 12:25, 7年前 , 1F
請問關於最後的Y矩陣 我想將y的值傳入 但是會遇到矩陣
11/18 12:25, 1F

11/18 12:25, 7年前 , 2F
大小不合的問題 是我缺少了什麼語法嗎?
11/18 12:25, 2F

11/18 12:27, 7年前 , 3F
y矩陣的確是我所需要的
11/18 12:27, 3F

11/18 12:27, 7年前 , 4F
現在想要沿著diagonal取值
11/18 12:27, 4F

11/18 12:27, 7年前 , 5F
有什麼特殊的語法能避免迴圈嗎?
11/18 12:27, 5F

11/19 10:43, 7年前 , 6F
y=conj(Rx(2:end))*Rx(2:end)';[y,d]=spdiags(tril(y,-1));
11/19 10:43, 6F

11/19 10:44, 7年前 , 7F
y(end,:)=[];Y=zeros(l-2,l-2);Y(:,-d)=y;
11/19 10:44, 7F

11/19 10:44, 7年前 , 8F
R=cumsum(flipud(Y));R=flipud(R).';
11/19 10:44, 8F

11/19 10:44, 7年前 , 9F
改成這樣不好嗎?
11/19 10:44, 9F

11/23 10:28, 7年前 , 10F
晚看到了,目前跑起來可以,謝謝你!
11/23 10:28, 10F

11/24 17:40, 7年前 , 11F
方便的話可以回報速度嗎?
11/24 17:40, 11F

11/26 10:09, 7年前 , 12F
K*N=512時現在只需要400多秒了
11/26 10:09, 12F

11/26 23:11, 7年前 , 13F
你是不是哪裡搞錯了,我跑只要一秒不到
11/26 23:11, 13F

11/26 23:26, 7年前 , 14F
照著你原來的例子也只要不到4秒.....
11/26 23:26, 14F
文章代碼(AID): #1Q3AAG1N (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
1
14
文章代碼(AID): #1Q3AAG1N (MATLAB)