Calculating correlation between points where each points has a timeseries(计算每个点具有时间序列的点之间的相关性)
本文介绍了计算每个点具有时间序列的点之间的相关性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要一些建议,如何更快地编写代码来解决我的问题。我正在研究如何计算空间(X,Y,Z)中的点之间的相关性,其中对于每个点,我有随时间变化的速度数据,理想情况下,我希望每个点P1计算与所有其他点的速度相关性。 最后,我希望有一个矩阵,对于每一对坐标(X1,Y1,Z1),(X2,Y2,Z2),我得到皮尔逊相关系数。我不完全确定如何用Python语言最好地组织这项工作。到目前为止,我所做的是定义了不同方向上的点的线,并为每条线计算点之间的相关性。这对分析是有效的,但我最终会执行需要很长时间的循环,我认为只计算所有点之间的相关性会更好。现在,我正在使用Pandas DataFrame和statsModels进行关联(stats.peelsonr(point_X_time.Vx,point_Y_time.Vx)),这是可行的,但我不知道如何有效地将其并行化。
我现在有一个DataFrame中的所有数据,头部看起来像:
Velocity X Y Z Time 0 -12.125850 2.036 0 1.172 10.42 1 -12.516033 2.036 0 1.164 10.42 2 -11.816067 2.028 0 1.172 10.42 3 -10.722124 2.020 0 1.180 10.42 4 -10.628474 2.012 0 1.188 10.42
行数约为300,000行,但如果代码速度更快,行数很容易增加。
推荐答案
解决方案1:
groups = df.groupby(["X", "Y", "Z"])
您按空间中的点对数据进行分组。
然后迭代所有点的组合并计算相关性
import itertools
import numpy as np
for combinations in itertools.combinations(groups.groups.keys(),2):
first = groups.get_group(combinations[0])["Velocity"]
second = groups.get_group(combinations[1])["Velocity"]
if len(first) == len(second):
print(f"{combinations} {np.corrcoef(first, second)[0,1]:.2f}")
解决方案2:
df["cc"] = df.groupby(["X", "Y", "Z"]).cumcount()
df.set_index(["cc","X", "Y", "Z"])
df.unstack(level=[1,2,3])["Velocity"].corr()
这篇关于计算每个点具有时间序列的点之间的相关性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:计算每个点具有时间序列的点之间的相关性
基础教程推荐
猜你喜欢
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 筛选NumPy数组 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01