如何解释numpy.corrcoef值和numpy.corrcoef值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我有两个一维数组,我想看看它们之间的相互关系。我应该用什么程序来处理?我在用numpy.corrcoef(arrayA, arrayB)numpy.correlate(arrayA, arrayB)。有人能说明一下如何理解和解释这些数值结果(最好是使用一个例子)吗?

提问于
用户回答回答于

使用numpy.correlate:

import numpy as np
import matplotlib.pyplot as plt

some_data = np.random.uniform(0,1,size=100)
subset = some_data[42:50]

mean = np.mean(some_data)
some_data_normalised = some_data - mean
subset_normalised = subset - mean

correlated = np.correlate(some_data_normalised, subset_normalised)
max_index = np.argmax(correlated)  # 42 !

我使用它的第二个用途(以及如何解释结果)是用于频率检测:

hz_a = np.cos(np.linspace(0,np.pi*6,100))
hz_b = np.cos(np.linspace(0,np.pi*4,100))

f, axarr = plt.subplots(2, sharex=True)

axarr[0].plot(hz_a)
axarr[0].plot(hz_b)
axarr[0].grid(True)

hz_a_autocorrelation = np.correlate(hz_a,hz_a,'same')[round(len(hz_a)/2):]
hz_b_autocorrelation = np.correlate(hz_b,hz_b,'same')[round(len(hz_b)/2):]

axarr[1].plot(hz_a_autocorrelation)
axarr[1].plot(hz_b_autocorrelation)
axarr[1].grid(True)

plt.show()

找出第二个峰的指数。这样你就可以回去找频率了。

first_min_index = np.argmin(hz_a_autocorrelation)
second_max_index = np.argmax(hz_a_autocorrelation[first_min_index:])
frequency = 1/second_max_index
用户回答回答于

numpy.correlate只需返回两个向量的互相关。

如果您需要理解互相关联,那么http://en.wikipedia.org/wiki/Cross-correlation.

通过查看自相关函数(与其自身相关的向量)可以看到一个很好的例子:

import numpy as np

# create a vector
vector = np.random.normal(0,1,size=1000) 

# insert a signal into vector
vector[::50]+=10

# perform cross-correlation for all data points
output = np.correlate(vector,vector,mode='full')

当两个数据集重叠时,这将返回具有最大值的梳/shah函数。由于这是一个自相关,两个输入信号之间不会有“滞后”。因此,关联的最大值是向量.size-1。

如果只想要重叠数据的相关值,则可以使用mode='valid'

扫码关注云+社区