python - 数据集的最小距离
问题描述
from scipy.spatial.distance import cdist
from sklearn.datasets import make_moons
X, y = make_moons()
cdist(X,X).min(axis=1)
给我
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
这不是我想要的。我想要不等于的所有点X
之间的最小距离。当然,如果,那么我会得到。我怎样才能做到这一点?i
j
i=j
0
cdist
解决方案
cdist
计算数组的成对距离是一种过度杀伤力。对于数组,上三角形是所有可能距离的最小有意义表示,不包括到自身的 0 距离。这样做的方法是使用pdist
:
from scipy.spatial.distance import pdist
from sklearn.datasets import make_moons
X, y = make_moons()
# desired output
pdist(X).min()
它返回一个上三角 ndarray,它是:
Y:ndarray 返回一个压缩距离矩阵 Y。对于每个 i 和 j(其中 i<j<m),其中 m 是原始观测值的数量。度量 dist(u=X[i], v=X[j]) 被计算并存储在条目 ij 中。
您可以在此处阅读有关压缩矩阵的更多信息
时间比较:
%timeit pdist(X)
73 µs ± 825 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit cdist(X,X)
112 µs ± 315 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
推荐阅读
- arrays - 这是什么类型的数组声明?“1/(A10:Z10>0)”
- python - Python3 (Anaconda3) 和 Matplotlib 绘制指定的 x-ases 值
- corda - 交易是如何从 SignedTransaction 到 LedgerTransaction 的?
- java - TestNG 断言中的运行时问题
- javascript - 如何使用 *ngFor 迭代多维数组
- ios - 表视图单元格在引用它们的表视图被释放后不会被释放
- oracle - Oracle 10g 程序编译错误
- angular - 我在 Todos 项目期间遇到错误:http://localhost:4200/:404 Not Found 的 Http 失败响应
- r - 匹配来自两个不同数据集(dbSNP ID)的 col 值并合并数据集
- c - 向数组添加元素,旧值变为 0 但新显示