我正在尝试对齐两个信号以获得给出最佳系数的滞后。我在matplotlib中使用xcorr
函数。我只对以下代码中的z
感兴趣。
有没有办法抑制情节(我不想要情节)并只得到结果?
from matplotlib.pyplot import xcorr
z = xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)
lagsOut = list(z[0])
corrCoeff = list(z[1])
由于
答案 0 :(得分:4)
matplotlib
是一个绘图模块。如果您不想绘图,最好直接使用numpy
。见numpy.correlate
如果您需要xcorr
以外的其他内容,可以使用inspect.getsource
查看其功能。这是一个简略的转储:
def xcorr(self, x, y, normed=True, detrend=mlab.detrend_none,
usevlines=True, maxlags=10, **kwargs):
Nx = len(x)
if Nx != len(y):
raise ValueError('x and y must be equal length')
x = detrend(np.asarray(x))
y = detrend(np.asarray(y))
c = np.correlate(x, y, mode=2)
if normed:
c /= np.sqrt(np.dot(x, x) * np.dot(y, y))
if maxlags is None:
maxlags = Nx - 1
if maxlags >= Nx or maxlags < 1:
raise ValueError('maglags must be None or strictly '
'positive < %d' % Nx)
lags = np.arange(-maxlags, maxlags + 1)
c = c[Nx - 1 - maxlags:Nx + maxlags]
if usevlines:
a = self.vlines(lags, [0], c, **kwargs)
b = self.axhline(**kwargs)
else:
kwargs.setdefault('marker', 'o')
kwargs.setdefault('linestyle', 'None')
a, = self.plot(lags, c, **kwargs)
b = None
return lags, c, a, b
答案 1 :(得分:2)
使用np.correlate
:
import numpy as np
x = [1., 2., 3., 4., 5.]
y = [0, 0, 0, 0, 1.]
corrCoef = np.correlate(x, y, 'full')
lagsOut = np.arange(-len(x)+1, len(x))
答案 2 :(得分:0)
我在这里回答,https://stackoverflow.com/a/47897581/5122657
有时我们无法使用numpy.correlate
,因为有时我们需要仅由matplotlib.xcorr
提供的maxlags参数。但我明白,如果我们直接将复杂数据类型作为参数放入matplotlib.xcorr
,当matplotlib尝试绘制绘图时,我们将得到“将复数转换为实数数据类型”警告。
下面我修改了matplotlib中的代码,因此它可以作为一个独立的函数使用。
<!-- language: python -->
import numpy as np
import matplotlib.pyplot as plt
def xcorr(x, y, maxlags=10):
Nx = len(x)
if Nx != len(y):
raise ValueError('x and y must be equal length')
c = np.correlate(x, y, mode=2)
if maxlags is None:
maxlags = Nx - 1
if maxlags >= Nx or maxlags < 1:
raise ValueError('maxlags must be None or strictly positive < %d' % Nx)
c = c[Nx - 1 - maxlags:Nx + maxlags]
return c