<p>因为你的数组大小不一样(我假设你用的是相同的实时时间),你需要对它们进行插值,以便在相关的点集上进行比较。
以下代码执行此操作,并计算相关度量值:</p>
<pre><code>#!/usr/bin/python
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import scipy.spatial.distance as ssd
import scipy.stats as ss
x = np.linspace(0, 10, num=11)
x2 = np.linspace(1, 11, num=13)
y = 2*np.cos( x) + 4 + np.random.random(len(x))
y2 = 2* np.cos(x2) + 5 + np.random.random(len(x2))
# Interpolating now, using linear, but you can do better based on your data
f = interp1d(x, y)
f2 = interp1d(x2,y2)
points = 15
xnew = np.linspace ( min(x), max(x), num = points)
xnew2 = np.linspace ( min(x2), max(x2), num = points)
ynew = f(xnew)
ynew2 = f2(xnew2)
plt.plot(x,y, 'r', x2, y2, 'g', xnew, ynew, 'r ', xnew2, ynew2, 'g ')
plt.show()
# Now compute correlations
print ssd.correlation(ynew, ynew2) # Computes a distance measure based on correlation between the two vectors
print np.correlate(ynew, ynew2, mode='valid') # Does a cross-correlation of same sized arrays and gives back correlation
print np.corrcoef(ynew, ynew2) # Gives back the correlation matrix for the two arrays
print ss.spearmanr(ynew, ynew2) # Gives the spearman correlation for the two arrays
</code></pre>
<p><a href="https://i.stack.imgur.com/dQNGB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/dQNGB.png" alt="The two arrays"/></a></p>
<p>输出:</p>
^{pr2}$
<p>请记住,这里的相关性是参数型和皮尔逊型的,并且假设计算相关性是单调的。如果不是这样,并且您认为数组只是一起改变符号,那么可以像上一个例子一样使用Spearman的关联。在</p>