pdist#
- scipy.spatial.distance.pdist(X, метрика='euclidean', *, выход=None, **kwargs)[источник]#
Попарные расстояния между наблюдениями в n-мерном пространстве.
См. Примечания для общих соглашений о вызовах.
- Параметры:
- Xarray_like
Массив размером m на n, содержащий m исходных наблюдений в n-мерном пространстве.
- метрикаstr или функция, опционально
Метрика расстояния для использования. Функция расстояния может быть ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’, ‘kulczynski1’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’.
- выходndarray, необязательно
Выходной массив. Если не None, сжатая матрица расстояний Y сохраняется в этом массиве.
- **kwargsdict, optional
Дополнительные аргументы для метрика: обратитесь к документации каждой метрики для списка всех возможных аргументов.
Некоторые возможные аргументы:
p : скаляр p-норма для применения Минковского, взвешенная и невзвешенная. По умолчанию: 2.
w : ndarray Вектор весов для метрик, поддерживающих веса (например, Минковского).
V : ndarray Вектор дисперсии для стандартизированного евклидова расстояния. По умолчанию: var(X, axis=0, ddof=1)
VI : ndarray Обратная матрица ковариации для расстояния Махаланобиса. По умолчанию: inv(cov(X.T)).T
- Возвращает:
- Yndarray
Возвращает сжатую матрицу расстояний Y. Для каждого \(i\) и \(j\) (где \(i
), где m - количество исходных наблюдений. Метрика dist(u=X[i], v=X[j])вычисляется и сохраняется в записиm * i + j - ((i + 2) * (i + 1)) // 2.
Смотрите также
squareformпреобразует между сжатыми матрицами расстояний и квадратными матрицами расстояний.
Примечания
См.
squareformдля информации о том, как вычислить индекс этой записи или преобразовать сжатую матрицу расстояний в избыточную квадратную матрицу.Ниже приведены распространённые соглашения о вызовах.
Y = pdist(X, 'euclidean')Вычисляет расстояние между m точками, используя евклидово расстояние (2-норма) как метрику расстояния между точками. Точки расположены как m n-мерных векторов-строк в матрице X.
Y = pdist(X, 'minkowski', p=2.)Вычисляет расстояния с использованием расстояния Минковского \(\|u-v\|_p\) (\(p\)-norm) где \(p > 0\) (обратите внимание, что это только квазиметрика, если \(0 < p < 1\)).
Y = pdist(X, 'cityblock')Вычисляет городское или манхэттенское расстояние между точками.
Y = pdist(X, 'seuclidean', V=None)Вычисляет стандартизированное евклидово расстояние. Стандартизированное евклидово расстояние между двумя n-векторами
uиvявляется\[\sqrt{\sum {(u_i-v_i)^2 / V[x_i]}}\]V — вектор дисперсии; V[i] — дисперсия, вычисленная по всем i-м компонентам точек. Если не передано, вычисляется автоматически.
Y = pdist(X, 'sqeuclidean')Вычисляет квадрат евклидова расстояния \(\|u-v\|_2^2\) между векторами.
Y = pdist(X, 'cosine')Вычисляет косинусное расстояние между векторами u и v,
\[1 - \frac{u \cdot v} {{\|u\|}_2 {\|v\|}_2}\]где \(\|*\|_2\) является 2-нормой своего аргумента
*, и \(u \cdot v\) является скалярным произведениемuиv.Y = pdist(X, 'correlation')Вычисляет корреляционное расстояние между векторами u и v. Это
\[1 - \frac{(u - \bar{u}) \cdot (v - \bar{v})} {{\|(u - \bar{u})\|}_2 {\|(v - \bar{v})\|}_2}\]где \(\bar{v}\) является средним значением элементов вектора v, и \(x \cdot y\) является скалярным произведением \(x\) и \(y\).
Y = pdist(X, 'hamming')Вычисляет нормализованное расстояние Хэмминга или долю элементов вектора между двумя n-векторами
uиvкоторые не согласуются. Для экономии памяти матрицаXможет быть типа boolean.Y = pdist(X, 'jaccard')Вычисляет расстояние Жаккара между точками. Для двух векторов,
uиv, расстояние Жаккара — это доля тех элементовu[i]иv[i]которые не согласуются.Y = pdist(X, 'jensenshannon')Вычисляет расстояние Йенсена-Шеннона между двумя вероятностными массивами. Даны два вероятностных вектора, \(p\) и \(q\), расстояние Йенсена-Шеннона равно
\[\sqrt{\frac{D(p \parallel m) + D(q \parallel m)}{2}}\]где \(m\) является поточечным средним \(p\) и \(q\) и \(D\) является дивергенцией Кульбака-Лейблера.
Y = pdist(X, 'chebyshev')Вычисляет расстояние Чебышёва между точками. Расстояние Чебышёва между двумя n-векторами
uиvявляется максимальным расстоянием нормы-1 между их соответствующими элементами. Более точно, расстояние задается как\[d(u,v) = \max_i {|u_i-v_i|}\]Y = pdist(X, 'canberra')Вычисляет расстояние Канберры между точками. Расстояние Канберры между двумя точками
uиvявляется\[d(u,v) = \sum_i \frac{|u_i-v_i|} {|u_i|+|v_i|}\]Y = pdist(X, 'braycurtis')Вычисляет расстояние Брея-Кёртиса между точками. Расстояние Брея-Кёртиса между двумя точками
uиvявляется\[d(u,v) = \frac{\sum_i {|u_i-v_i|}} {\sum_i {|u_i+v_i|}}\]Y = pdist(X, 'mahalanobis', VI=None)Вычисляет расстояние Махаланобиса между точками. Расстояние Махаланобиса между двумя точками
uиvявляется \(\sqrt{(u-v)(1/V)(u-v)^T}\) где \((1/V)\) (theVIпеременная) является обратной ковариацией. ЕслиVIне является None,VIбудет использоваться как обратная ковариационная матрица.Y = pdist(X, 'yule')Вычисляет расстояние Юла между каждой парой булевых векторов. (см. документацию функции yule)
Y = pdist(X, 'matching')Синоним для ‘hamming’.
Y = pdist(X, 'dice')Вычисляет расстояние Dice между каждой парой булевых векторов. (см. документацию функции dice)
Y = pdist(X, 'kulczynski1')Вычисляет расстояние kulczynski1 между каждой парой булевых векторов. (см. документацию функции kulczynski1)
Устарело с версии 1.15.0: Эта метрика устарела и будет удалена в SciPy 1.17.0. Замените использование
pdist(X, 'kulczynski1')с1 / pdist(X, 'jaccard') - 1.Y = pdist(X, 'rogerstanimoto')Вычисляет расстояние Роджерса-Танимото между каждой парой булевых векторов. (см. документацию функции rogerstanimoto)
Y = pdist(X, 'russellrao')Вычисляет расстояние Рассела-Рао между каждой парой булевых векторов. (см. документацию функции russellrao)
Y = pdist(X, 'sokalmichener')Вычисляет расстояние Сокала-Миченера между каждой парой булевых векторов. (см. документацию функции sokalmichener)
Устарело с версии 1.15.0: Эта метрика устарела и будет удалена в SciPy 1.17.0. Замените использование
pdist(X, 'sokalmichener')сpdist(X, 'rogerstanimoto').Y = pdist(X, 'sokalsneath')Вычисляет расстояние Сокала-Снита между каждой парой булевых векторов. (см. документацию функции sokalsneath)
Y = pdist(X, 'kulczynski1')Вычисляет расстояние Кульчинского 1 между каждой парой булевых векторов. (см. документацию функции kulczynski1)
Y = pdist(X, f)Вычисляет расстояние между всеми парами векторов в X с использованием предоставленной пользователем 2-арной функции f. Например, Евклидово расстояние между векторами может быть вычислено следующим образом:
dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))
Обратите внимание, что следует избегать передачи ссылки на одну из функций расстояния, определенных в этой библиотеке. Например,:
dm = pdist(X, sokalsneath)
вычислит попарные расстояния между векторами в X с помощью функции Python sokalsneath. Это приведет к вызову sokalsneath \({n \choose 2}\) раз, что неэффективно. Вместо этого оптимизированная версия на C более эффективна, и мы вызываем её с использованием следующего синтаксиса:
dm = pdist(X, 'sokalsneath')
Примеры
>>> import numpy as np >>> from scipy.spatial.distance import pdist
xявляется массивом из пяти точек в трёхмерном пространстве.>>> x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])
pdist(x)без дополнительных аргументов вычисляет 10 попарных евклидовых расстояний:>>> pdist(x) array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949, 6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])
Следующее вычисляет попарные расстояния Минковского с
p = 3.5:>>> pdist(x, metric='minkowski', p=3.5) array([2.04898923, 5.1154929 , 7.02700737, 2.43802731, 4.19042714, 6.03956994, 1. , 4.45128103, 4.10636143, 5.0619695 ])
Попарные расстояния городских кварталов или манхэттенские расстояния:
>>> pdist(x, metric='cityblock') array([ 3., 11., 10., 4., 8., 9., 1., 9., 7., 8.])