查找列表内列表之间的相关性的效率问题

2024-01-05

如果我有两个小列表,我想找到里面每个列表之间的相关性list1里面的每个列表list2, 我可以做这个

from scipy.stats import pearsonr

list1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
list2 = [[10,20,30],[40,50,60],[77,78,79],[80,78,56]]

corrVal = []
for i in list1:
    for j in list2:
        corrVal.append(pearsonr(i,j)[0])

print(corrVal)

OUTPUT: [1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588]

效果很好……差不多。 (编辑:刚刚注意到我上面的相关输出似乎给出了正确的答案,但它们重复了 4 次。不太确定为什么这样做)

然而,对于列表中包含 1000 个值的较大数据集,我的代码会无限期冻结,不会输出任何错误,因此每次都会强制退出 IDE。有什么想法我在这里滑倒了吗?不确定 pearsonr 函数可以处理的数量是否存在固有限制,或者我的编码是否导致了问题。


scipy 模块scipy.spatial.distance http://docs.scipy.org/doc/scipy/reference/spatial.distance.html包括称为距离函数皮尔逊距离 https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Pearson.E2.80.99s_distance,即 1 减去相关系数。通过使用参数metric='correlation' in scipy.spatial.distance.cdist http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html,您可以有效计算两个输入中每对向量的 Pearson 相关系数。

这是一个例子。我将修改您的数据,使系数更加多样化:

In [96]: list1 = [[1, 2, 3.5], [4, 5, 6], [7, 8, 12], [10, 7, 10]]

In [97]: list2 = [[10, 20, 30], [41, 51, 60], [77, 80, 79], [80, 78, 56]]

所以我们知道会发生什么,这里是使用计算得出的相关系数scipy.stats.pearsonr:

In [98]: [pearsonr(x, y)[0] for x in list1 for y in list2]
Out[98]: 
[0.99339926779878296,
 0.98945694873927104,
 0.56362148019067804,
 -0.94491118252306794,
 1.0,
 0.99953863896044937,
 0.65465367070797709,
 -0.90112711377916588,
 0.94491118252306805,
 0.93453339271427294,
 0.37115374447904509,
 -0.99339926779878274,
 0.0,
 -0.030372836961539348,
 -0.7559289460184544,
 -0.43355498476205995]

在数组中查看它们更方便:

In [99]: np.array([pearsonr(x, y)[0] for x in list1 for y in list2]).reshape(len(list1), len(list2))
Out[99]: 
array([[ 0.99339927,  0.98945695,  0.56362148, -0.94491118],
       [ 1.        ,  0.99953864,  0.65465367, -0.90112711],
       [ 0.94491118,  0.93453339,  0.37115374, -0.99339927],
       [ 0.        , -0.03037284, -0.75592895, -0.43355498]])

这是使用计算得出的相同结果cdist:

In [100]: from scipy.spatial.distance import cdist

In [101]: 1 - cdist(list1, list2, metric='correlation')
Out[101]: 
array([[ 0.99339927,  0.98945695,  0.56362148, -0.94491118],
       [ 1.        ,  0.99953864,  0.65465367, -0.90112711],
       [ 0.94491118,  0.93453339,  0.37115374, -0.99339927],
       [ 0.        , -0.03037284, -0.75592895, -0.43355498]])

Using cdist is much比打电话更快pearsonr在嵌套循环中。这里我将使用两个数组,data1 and data2,每个大小为 (100, 10000):

In [102]: data1 = np.random.randn(100, 10000)

In [103]: data2 = np.random.randn(100, 10000)

我会用方便的%timeit命令输入ipython测量执行时间:

In [104]: %timeit c1 = [pearsonr(x, y)[0] for x in data1 for y in data2]
1 loop, best of 3: 836 ms per loop

In [105]: %timeit c2 = 1 - cdist(data1, data2, metric='correlation')
100 loops, best of 3: 4.35 ms per loop

嵌套循环需要 836 毫秒,cdist.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找列表内列表之间的相关性的效率问题 的相关文章

  • 命令“pip list”显示错误

    我想做 python 但我什至无法配置它 D 所以我在 Linux Mint 上安装了 pip 当输入 pip list 时出现错误 Exception Traceback most recent call last File usr li
  • 使用 numpy 和 matplotlib 绘制总和直方图,而不是计数

    我有一些每行两列的数据 就我而言 工作提交时间和区域 我使用 matplotlib 的 hist 函数生成一个图表 其中 x 轴上按天划分时间 y 轴上按天计数 import numpy as np import matplotlib py
  • IPython自动开启matplotlib交互模式

    我遇到了 IPython 的一些新奇怪行为 我只需重新安装我的 miniconda 所以我现在有了新的 IPython 和 Matplotlib 版本 事实证明 IPython 会自动将 matplotlib 切换到交互模式 这具有令人讨厌
  • 字符串的正则表达式

    我想在Python中分割字符串 示例字符串 大家好 这是第一幕 场景 1 和场景 2 这是第二幕 场景 1 和 场景 2 及更多 进入以下列表 Hi this is ACT I SCENE 1 and SCENE2 and this is
  • 如何在 PyQt5 GUI 中快速绘制 matplotlib 实时绘图

    几年前 我已经尝试过嵌入现场matplotlib中的情节PyQt5图形用户界面 实时绘图显示从传感器捕获的实时数据流 某些过程 我已经成功了 您可以在此处阅读相关帖子 您自己的 GUI 中的 Matplotlib 动画 https stac
  • 如何在 Linux/Unix 上根据文件类型添加文件扩展名?

    这是一个关于 Unix shell 脚本 任何 shell 的问题 但任何其他 标准 脚本语言解决方案也将受到赞赏 我有一个充满文件的目录 其中文件名是这样的哈希值 fd73d0cf8ee68073dce270cf7e770b97 fec8
  • 使用 python 检测给定音频文件中的静音索引

    我正在尝试使用 numpy struct 等各种模块在 python 中处理音频文件 但是我真的很难检测文件中的静音 就像在哪里存在静音一样 我遇到的方法之一是在音频信号上滑动固定时间间隔的窗口并记录元素平方和 我是Python新手 几乎不
  • 当前从解码字符串中删除“surrogateescape”字符的习惯用法

    阿明 罗纳彻 http lucumr pocoo org 2013 7 2 the updated guide to unicode http lucumr pocoo org 2013 7 2 the updated guide to u
  • 如何为超过 50.000 个网址的 django 站点地图创建索引

    我有以下网址配置 url r sitemap xml index sitemaps sitemaps url r sitemap P section xml cache page 86400 sitemap sitemaps sitemap
  • Tkinter Checkbutton 不会更改我的变量

    我正在尝试将 Checkbutton 与函数一起使用 my var 永远不会改变 但它总是调用我的函数 这里是代码 my var False def controllo carta global my var print str my va
  • 如何测试 Python readline 完成情况?

    我正在用 Python 编写一个命令行界面 它使用 readline 模块来提供命令历史记录和完成 虽然在交互模式下一切正常 但我想对完成功能运行自动化测试 我天真的第一次尝试涉及使用文件作为标准输入 my app lt command f
  • h5py安装后出现错误[重复]

    这个问题在这里已经有答案了 可能的重复 在 OS X 上安装 h5py https stackoverflow com questions 6988010 installing h5py on os x 我正在尝试让 h5py 在我的 OS
  • pytest 是否有类似 google test 的非致命 EXPECT_* 行为?

    我更熟悉谷歌测试框架并了解他们支持的主要行为对ASSERT vs EXPECT 这是致命和非致命断言模式 来自文档 https github com google googletest blob master googletest docs
  • 在Python 3中从网络下载文件

    我正在创建一个程序 通过读取同一游戏 应用程序的 jad 文件中指定的 URL 从 Web 服务器下载 jar java 文件 我正在使用Python 3 2 1 我已经设法从 JAD 文件中提取 JAR 文件的 URL 每个 JAD 文件
  • 如何在运行测试用例后保留 django 测试数据库

    当我通过输入运行测试用例时 python manage py test myapp 测试用例完成后 django 测试运行程序默认删除测试数据库 我不想让它被删除 我可以使用任何数据库 我想保留我的数据库 因为数据库中有错误 我想在创建的数
  • NumPy“记录数组”或“结构化数组”或“recarray”

    NumPy 结构化数组 记录数组 和 记录数组 之间有什么区别 如果有的话 The NumPy 文档 http docs scipy org doc numpy user basics rec html暗示前两个是相同的 如果是 那么该对象
  • 如何获取函数内的函数对象(Python)

    我想要有类似的东西 def x print get def name 但不一定知道名字x 理想情况下它会返回 x 其中 x 是函数的名称 您可以使用 Python 的内置检查库来完成此操作 如果您想处理更复杂的情况 您可以阅读更多其文档 但
  • 如何在多个 csv 文件中收集样本

    我有以下文件 file1 csv file2 csv 我想从每个 csv 文件中提取样本 I tried f1 pd read csv file1 csv f1 sample 2 f1 append f2 我尝试循环并追加 我想有些解决方案
  • django-过滤器和聚合函数

    这是一个特定于应用程序的问题 Django 过滤器 https github com alex django filter 这里给没用过的人简单说明一下 f ProductFilter request GET queryset Produc
  • Jupyter Notebook 输出中仅部分显示图表

    我正在尝试获取一个类似于此链接中显示的 2 的 PyLDAvis 图 您可以立即看到它 主题间距离图和前 30 个最显着的术语 http nbviewer jupyter org github bmabey hacker news topi

随机推荐