2013-04-26 28 views
2

我想要一個代碼更高效的時間下面的代碼。最好沒有迴路。使這個matlab片段運行沒有循環

參數:

t % time values vector 
t_index = c % one of the possible indices ranging from 1:length(t). 
A % a MXN array where M = length(t) 
B % a 1XN array 

代碼:

m = 1; 
for k = t_index:length(t) 
     A(k,1:(end-m+1)) = A(k,1:(end-m+1)) + B(m:end); 
     m = m + 1; 
end 

非常感謝。

回答

2

我從B構建了一個大小爲NxM的矩陣(稱之爲B2),根據條件在正確的位置填充零點,然後根據條件填充三角形,然後您需要做的就是A+B2

是這樣的:

N=size(A,2); 
B2=zeros(size(A)); 
k=c:length(t); 
B2(k(1):k(N),:)=hankel(B) 
ans=A+B2; 

注意,事實上,它是「矢量」並不意味着它是更快的這些日子。 Matlab的JIT使循環具有可比性,有時甚至比內置矢量化選項更快。

+0

我有一個類似的解決方案,但我刪除它,我不明白它是正確的:)更不用說,我得到了內存錯誤從'hankel'函數與OP的大小使用 – Amro 2013-04-27 01:08:26

+0

I我不確定這比在性能上的for循環更好。爲什麼'hankel'讓你失去記憶? – bla 2013-04-27 05:45:55

+0

實際上for循環在我的電腦上做得更好......無論如何非常感謝,我仍然從經驗中學到了很多東西。 – user2324712 2013-04-27 08:37:48