python - Numpy/Pandas 关联 2 个不同长度的数组

标签 python numpy math pattern-matching pearson-correlation

我正在尝试计算两个长度不同的数据集的相关系数。以下代码仅适用于等长数组。

import numpy as np
from scipy.stats.stats import pearsonr

a = [0, 0.4, 0.2, 0.4, 0.2, 0.4, 0.2, 0.5]
b = [25, 40, 62, 58, 53, 54]

print pearsonr(a, b)

在我的例子中,b 向量长度可以在 50 - 100 个数据点之间变化。而我要匹配的功能是标准的。 a 的附加图像。是否有任何其他首选模块来匹配此类模式?

enter image description here

最佳答案

派对有点晚了,但由于这是 Google 的最高结果,我将给出这个问题的可能答案:

import pandas as pd
from scipy.stats import pearsonr 
import numpy as np 


a = [ 0, 0.4, 0.2, 0.4, 0.2, 0.45, 0.2, 0.52, 0.52, 0.4, 0.21, 0.2, 0.4, 0.51]
b = [ 0.4, 0.2, 0.5]


df = pd.DataFrame(dict(x=a))

CORR_VALS = np.array(b)
def get_correlation(vals):
    return pearsonr(vals, CORR_VALS)[0]

df['correlation'] = df.rolling(window=len(CORR_VALS)).apply(get_correlation)

说明

pandas DataFrame 有 rolling() 方法,它以数组长度 length (window) 作为参数。从 rolling() 返回的对象有 apply()将函数作为参数的方法。您可以计算例如 Pearson Correlation coefficient使用 pearsonr来自 scipy.stats。

示例输出

In [2]: df['correlation'].values
Out[2]:
array([        nan,         nan, -0.65465367,  0.94491118, -0.94491118,
        0.98974332, -0.94491118,  0.9923356 , -0.18898224, -0.75592895,
       -0.44673396,  0.1452278 ,  0.78423011,  0.16661846])

enter image description here

用问题中的示例数据

In [1]: df
Out[1]:
     x  correlation
0  0.0          NaN
1  0.4          NaN
2  0.2          NaN
3  0.4          NaN
4  0.2          NaN
5  0.4     0.527932
6  0.2    -0.159167
7  0.5     0.189482

关于python - Numpy/Pandas 关联 2 个不同长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51487046/

相关文章:

c++ - MS Visual C++ 中缺少 atanh 反双曲正切函数

python - 为什么我从 matplotlib 中得到了两次图例?

python - 排除区间的端点

python - 通过 pip 安装 dlib 库时出错

python - Django/python 和 Apache Solr : pysolr or solrpy?

python - Scipy 优化 : Get the function to print out its iterations

objective-c - 将索引转换为坐标的算术仅返回索引

Ruby:将负数更改为正数?

Python:有没有办法从编解码器名称获取语言名称

python - 如何在 Python 中解析 C 格式字符串?