2012-08-30 57 views
0

我有兩個數據集(x1,y1)(x2,y2),其中第一個數據集比第二個數據集長,這意味着x1[0]<x2[0]x1[-1]>x2[0]。但是第一個數據集的長度在每個方面更長一般是不一樣的。交叉相關的中點

我與交叉關聯SciPy的使用

ycorr = scipy.correlate(y1,y2,mode='valid') 
xcorr = np.linspace(0,len(ycorr)-1,len(ycorr)) 

我的問題是如何找到的互相關的中點=如果兩個數據集具有相同的長度和mode='valid'其中ycorr計算一個點。 所以中點不是xcorr [len(xcorr)/ 2]。

這可能很難理解我的問題,所以請問是否有不清楚的地方。

編輯

要找到中間點我們在長度看到終點。所以最後x1x2多長。

的中點由

for i in xrange(len(x1)-1): 
    if x1[i]<x2[-1] and x1[i+1]>x2[-1]: 
     I = i 
     break 

mid_point = (len(y1[I:-1])+len(y1[I+1:-1]))/2 
+0

問題:1 /「,其中第一個數據集是長比第一個「:你的意思是」第二個「,對吧? 2 /你關聯y1 & y2;但你在比較x1和x2的第一段? 3 /我不太熟悉correlate(),但是對於mode ='valid',它似乎只在y1和y2重疊的位置返回值;但仍然不會返回一個點(「一點」)。哪一點?在最好的情況下,假設y1和x1的長度匹配,並且y2和x2的長度匹配,你需要x1或x2中的一個點對應於輸出相關的中點。那是對的嗎? – Evert

+0

1:是的。我已更新該帖子。 2:我關聯y1和y2,因爲這是用來做相關性的方式。 3:那是對的。 mode ='valid'返回第一個和第二個數據集重疊的地方。如果計算互相關並且兩個數據集具有相同的長度(len(x1)= len(x2)),那麼我說的單點就是點。 這是正確的。 x1和y1具有相同的長度(對於x2和y2同樣)。 –

回答

0

給出根據本documentation,當您在'valid'模式相關y1(長度N+1)和y2(長度M+1,具有M<=N),返回中間N-M+1=(N+1)-(M+1)+1輸出值,從M開始[在'full'模式下,值從0返回到N+M,在'same'模式中N中間值返回從開始0]

所以,你應該有len(ycorr) = len(y1)-len(y2)+1=1如果兩個矢量具有相同大小)

你也有ycorr[i] = np.correlate(y1[i:len(y2)+i], y2, "valid")所有irange(len(ycorr))

+0

是的,我有'len(ycorr)= len(y1)-len(y2)+ 1',但是這並沒有給我我正在尋找的中點。 –

+0

你的中點不取決於你從'y1'(cf編輯)開始的位置嗎? –

+0

是的!這是很難解釋得當的。我的中點取決於y2相對於y1的起點。 –