我对

scipy.spatial.distance.pdist处理缺失(nan)值的方式感到有点困惑.

所以,万一我弄乱了矩阵的维度,让我们把它弄清楚.来自文档:

The points are arranged as m n-dimensional row vectors in the matrix X.

因此,让我们在10维空间中生成缺少值的三个点:

numpy.random.seed(123456789)

data = numpy.random.rand(3, 10) * 5

data[data < 1.0] = numpy.nan

如果我计算这三个观测值的欧几里德距离:

pdist(data, "euclidean")

我明白了:

array([ nan, nan, nan])

但是,如果我过滤掉所有缺少值的列,我会得到适当的距离值:

valid = [i for (i, col) in enumerate(data.T) if ~numpy.isnan(col).any()]

pdist(data[:, valid], "euclidean")

我明白了:

array([ 3.35518662, 2.35481185, 3.10323893])

这样,我丢弃了比我想要的更多的数据,因为我不需要过滤整个矩阵,而只需要一次比较一对矢量.我可以以某种方式使pdist或类似函数执行成对屏蔽吗?

编辑:

由于我的完整矩阵相当大,我对这里提供的小数据集进行了一些时序测试.

1.)scipy功能.

%timeit pdist(data, "euclidean")

10000 loops, best of 3: 24.4 µs per loop

2.)不幸的是,到目前为止提供的解决方案大约慢了10倍.

%timeit numpy.array([pdist(data[s][:, ~numpy.isnan(data[s]).any(axis=0)], "euclidean") for s in map(list, itertools.combinations(range(data.shape[0]), 2))]).ravel()

1000 loops, best of 3: 231 µs per loop

3.)然后我做了一个“纯粹的”Python测试,并感到惊喜:

from scipy.linalg import norm

%%timeit

m = data.shape[0]

dm = numpy.zeros(m * (m - 1) // 2, dtype=float)

mask = numpy.isfinite(data)

k = 0

for i in range(m - 1):

for j in range(i + 1, m):

curr = numpy.logical_and(mask[i], mask[j])

u = data[i][curr]

v = data[j][curr]

dm[k] = norm(u - v)

k += 1

10000 loops, best of 3: 98.9 µs per loop

所以我认为前进的方法是在函数中Cython化上面的代码.

python查询缺失值所在位置使用scipy_python – 使用缺失值计算scipy中的成对距离相关推荐

  1. python查询缺失值所在位置_Python Pandas找到缺失值的位置方法

    问题描述: python pandas判断缺失值一般采用 isnull(),然而生成的却是所有数据的true/false矩阵,对于庞大的数据dataframe,很难一眼看出来哪个数据缺失,一共有多少个 ...

  2. python查询缺失值所在位置使用scipy_在稀疏lil_matrix(Scipy / Python)中查找最大值及其索引...

    在Scipy稀疏lil_matrix对象中找到最大值及其对应的行和列索引的最佳方法是什么?我可以loop through the nonzero entries using itertools.izi ...

  3. Python查询手机号码所在地区的几种方式

    一.使用Python的BeautifulSoup访问[http://www.ip138.com]查询 本方法大致的思路如下: a)获取页面信息 b)解析返回的页面信息 c)保存查询到的信息到Excel ...

  4. Python查询手机号码所在地区

    import requests from bs4 import  BeautifulSoup import  xlwt   # 1.获取网页信息 def getHTMLText(url):     t ...

  5. python查询字符串是否包含某字符串_python 判断检测字符串中是否包含指定字符或字符串(比如:?)...

    in: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: Verdana, Arial, Helvetica, sans-se ...

  6. python求满足条件的值的个数_计算列表中满足特定条件的值的数目

    我有以下清单mylist = ['0.976850566018849', '1.01711066941038', '0.95545901267938', '1.13665822176679', '1. ...

  7. python如下函数返回两个数的平方和_计算Lis中数字平方和的函数

    我试着写一个平方和(xs)函数来计算列表xs中数字的平方和.例如,平方和([2,3,4])应返回4+9+16,即29: 我试过的是:import random xs = [] #create thre ...

  8. Docker所在目录以及查询正在运行容器的所在位置

    一.获取正在运行的容器ID [root@izuf60j0xye9c3vxjqujjiz ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS ...

  9. 《我的世界》Python编程入门(3)检测玩家所在位置

    案例:检测玩家所在位置 第一步:通过API接口连接游戏 1.1什么是API接口 我们的程序和Minecraft游戏可以理解为两个分隔两地的人,两者之间要进行沟通怎么办? 是不是要借助某种工具?比如电话 ...

最新文章

  1. Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
  2. 博客作业01-抽象数据类型
  3. 通过sqlplus执行*.sql文件时常见的问题总结
  4. hibernate自定义_如何自定义Hibernate脏检查机制
  5. maven deploy distributionManagement
  6. Linux vsyscall和vDSO加速系统调用
  7. PhantomJS命令行选项
  8. OpenCV Laplacian 拉普拉斯变换
  9. Jmeter学习(一)
  10. Mybatis中的update动态SQL语句
  11. 使用EditPlus 3时,如何重新设置HTML Page的Default模板
  12. matlab鲍威尔算法,鲍威尔法matlab程序
  13. 微信emoji表情包存入数据库报错处理
  14. 腰围尺寸2尺1、2、3、4、5、6、7、8寸分别等于是多少厘米/英寸(对照参考表)
  15. git init报错Reinitialized existing Git repository
  16. BlueCms v1.6 本地文件包含漏洞代码审计
  17. Android的16ms和垂直同步以及三重缓存
  18. python爬取微博数据存入数据库_python爬取微博并且存入数据库
  19. c#截取字符串中指定字符串后到结尾
  20. 模糊数学导论——模糊聚类分析

热门文章

  1. 自动驾驶中图像与点云融合的深度学习研究进展综述
  2. 基于C++的骨架提取的鼻祖算法
  3. 机器学习与高维信息检索 - Note 2 - 统计决策和机器学习
  4. 设置VSCode终端命令行清除快捷键Ctrl+K或Ctrl+L
  5. 如何用公式化思维?几个经典公式收集
  6. n-netstat 查看网络状态命令
  7. Linux命令find的35个实例
  8. 结构和联合--结构体内存和位段内存开辟规则
  9. JSP+Servlet+JavaBean
  10. docker(3)docker下的centos7下安装jdk