python查询缺失值所在位置使用scipy_python – 使用缺失值计算scipy中的成对距离
我对
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中的成对距离相关推荐
- python查询缺失值所在位置_Python Pandas找到缺失值的位置方法
问题描述: python pandas判断缺失值一般采用 isnull(),然而生成的却是所有数据的true/false矩阵,对于庞大的数据dataframe,很难一眼看出来哪个数据缺失,一共有多少个 ...
- python查询缺失值所在位置使用scipy_在稀疏lil_matrix(Scipy / Python)中查找最大值及其索引...
在Scipy稀疏lil_matrix对象中找到最大值及其对应的行和列索引的最佳方法是什么?我可以loop through the nonzero entries using itertools.izi ...
- Python查询手机号码所在地区的几种方式
一.使用Python的BeautifulSoup访问[http://www.ip138.com]查询 本方法大致的思路如下: a)获取页面信息 b)解析返回的页面信息 c)保存查询到的信息到Excel ...
- Python查询手机号码所在地区
import requests from bs4 import BeautifulSoup import xlwt # 1.获取网页信息 def getHTMLText(url): t ...
- python查询字符串是否包含某字符串_python 判断检测字符串中是否包含指定字符或字符串(比如:?)...
in: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: Verdana, Arial, Helvetica, sans-se ...
- python求满足条件的值的个数_计算列表中满足特定条件的值的数目
我有以下清单mylist = ['0.976850566018849', '1.01711066941038', '0.95545901267938', '1.13665822176679', '1. ...
- python如下函数返回两个数的平方和_计算Lis中数字平方和的函数
我试着写一个平方和(xs)函数来计算列表xs中数字的平方和.例如,平方和([2,3,4])应返回4+9+16,即29: 我试过的是:import random xs = [] #create thre ...
- Docker所在目录以及查询正在运行容器的所在位置
一.获取正在运行的容器ID [root@izuf60j0xye9c3vxjqujjiz ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS ...
- 《我的世界》Python编程入门(3)检测玩家所在位置
案例:检测玩家所在位置 第一步:通过API接口连接游戏 1.1什么是API接口 我们的程序和Minecraft游戏可以理解为两个分隔两地的人,两者之间要进行沟通怎么办? 是不是要借助某种工具?比如电话 ...
最新文章
- Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
- 博客作业01-抽象数据类型
- 通过sqlplus执行*.sql文件时常见的问题总结
- hibernate自定义_如何自定义Hibernate脏检查机制
- maven deploy distributionManagement
- Linux vsyscall和vDSO加速系统调用
- PhantomJS命令行选项
- OpenCV Laplacian 拉普拉斯变换
- Jmeter学习(一)
- Mybatis中的update动态SQL语句
- 使用EditPlus 3时,如何重新设置HTML Page的Default模板
- matlab鲍威尔算法,鲍威尔法matlab程序
- 微信emoji表情包存入数据库报错处理
- 腰围尺寸2尺1、2、3、4、5、6、7、8寸分别等于是多少厘米/英寸(对照参考表)
- git init报错Reinitialized existing Git repository
- BlueCms v1.6 本地文件包含漏洞代码审计
- Android的16ms和垂直同步以及三重缓存
- python爬取微博数据存入数据库_python爬取微博并且存入数据库
- c#截取字符串中指定字符串后到结尾
- 模糊数学导论——模糊聚类分析