Re: [求救]三重迴圈
※ 引述《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
11/18 12:25, 1F
→
11/18 12:25,
7年前
, 2F
11/18 12:25, 2F
→
11/18 12:27,
7年前
, 3F
11/18 12:27, 3F
→
11/18 12:27,
7年前
, 4F
11/18 12:27, 4F
→
11/18 12:27,
7年前
, 5F
11/18 12:27, 5F
→
11/19 10:43,
7年前
, 6F
11/19 10:43, 6F
→
11/19 10:44,
7年前
, 7F
11/19 10:44, 7F
→
11/19 10:44,
7年前
, 8F
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
11/26 10:09, 12F
→
11/26 23:11,
7年前
, 13F
11/26 23:11, 13F
→
11/26 23:26,
7年前
, 14F
11/26 23:26, 14F
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章