pdist

Попарное расстояние между парами наблюдений

Синтаксис

D = pdist(X)
D = pdist(X,Distance)
D = pdist(X,Distance,DistParameter)

Описание

пример

D = pdist(X) возвращает Евклидово расстояние между парами наблюдений в X.

пример

D = pdist(X,Distance) возвращает расстояние при помощи метода, заданного Distance.

пример

D = pdist(X,Distance,DistParameter) возвращает расстояние при помощи метода, заданного Distance и DistParameter. Можно задать DistParameter только, когда Distance является 'seuclidean', 'minkowski' или 'mahalanobis'.

Примеры

свернуть все

Вычислите Евклидово расстояние между парами наблюдений и преобразуйте вектор расстояния в матрицу с помощью squareform.

Создайте матрицу с тремя наблюдениями и двумя переменными.

rng('default') % For reproducibility
X = rand(3,2);

Вычислите Евклидово расстояние.

D = pdist(X)
D = 1×3

    0.2954    1.0670    0.9448

Попарные расстояния располагаются в порядке (2,1), (3,1), (3,2). Можно легко определить местоположение расстояния между наблюдениями i и j при помощи squareform.

Z = squareform(D)
Z = 3×3

         0    0.2954    1.0670
    0.2954         0    0.9448
    1.0670    0.9448         0

squareform возвращает симметрическую матрицу, где Z(i,j) соответствует попарному расстоянию между наблюдениями i и j. Например, можно найти расстояние между наблюдениями 2 и 3.

Z(2,3)
ans = 0.9448

Передайте Z функции squareform, чтобы воспроизвести вывод функции pdist.

y = squareform(Z)
y = 1×3

    0.2954    1.0670    0.9448

Выходные параметры y от squareform и D от pdist являются тем же самым.

Создайте матрицу с тремя наблюдениями и двумя переменными.

rng('default') % For reproducibility
X = rand(3,2);

Вычислите расстояние Минковскего с экспонентой по умолчанию 2.

D1 = pdist(X,'minkowski')
D1 = 1×3

    0.2954    1.0670    0.9448

Вычислите расстояние Минковскего с экспонентой 1, который равен расстоянию городского квартала.

D2 = pdist(X,'minkowski',1)
D2 = 1×3

    0.3721    1.5036    1.3136

D3 = pdist(X,'cityblock')
D3 = 1×3

    0.3721    1.5036    1.3136

Задайте пользовательскую функцию расстояния, которая игнорирует координаты со значениями NaN, и вычислите попарное расстояние при помощи пользовательской функции расстояния.

Создайте матрицу с тремя наблюдениями и двумя переменными.

rng('default') % For reproducibility
X = rand(3,2);

Примите, что первый элемент первого наблюдения отсутствует.

X(1,1) = NaN;

Вычислите Евклидово расстояние.

D1 = pdist(X)
D1 =

       NaN       NaN    0.9448

Если наблюдение, i или j содержат значения NaN, функциональный pdist, возвращает NaN для попарного расстояния между i и j. Поэтому D1 (1) и D1 (2), попарные расстояния (2,1) и (3,1), являются значениями NaN.

Задайте пользовательскую функцию расстояния naneucdist, который игнорирует координаты со значениями NaN и возвращает Евклидово расстояние.

function D2 = naneucdist(XI,XJ)  
%NANEUCDIST Euclidean distance ignoring coordinates with NaNs
n = size(XI,2);
sqdx = (XI-XJ).^2;
nstar = sum(~isnan(sqdx),2); % Number of pairs that do not contain NaNs
nstar(nstar == 0) = NaN; % To return NaN if all pairs include NaNs
D2squared = nansum(sqdx,2).*n./nstar; % Correction for missing coordinates
D2 = sqrt(D2squared);

Вычислите расстояние с naneucdist путем передачи указателя на функцию как входного параметра pdist.

D2 = pdist(X,@naneucdist)
D2 =

    0.3974    1.1538    0.9448

Входные параметры

свернуть все

Входные данные, заданные как числовая матрица размера m-by-n. Строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным.

Типы данных: single | double

Метрика расстояния, заданная как вектор символов, представляет в виде строки скаляр или указатель на функцию, как описано в следующей таблице.

ЗначениеОписание
'euclidean'

Евклидово расстояние (значение по умолчанию).

'squaredeuclidean'

Придал Евклидову расстоянию квадратную форму. (Эта возможность предоставляется для эффективности только. Это не удовлетворяет треугольное неравенство.)

'seuclidean'

Стандартизированное Евклидово расстояние. Каждое координатное различие между наблюдениями масштабируется путем деления на соответствующий элемент стандартного отклонения, S = nanstd(X). Используйте DistParameter, чтобы задать другое значение для S.

'mahalanobis'

Расстояние Mahalanobis с помощью выборочной ковариации X, C = nancov(X). Используйте DistParameter, чтобы задать другое значение для C, где матричный C симметричен и положительный определенный.

'cityblock'

Расстояние городского квартала.

'minkowski'

Расстояние Минковскего. Экспонента по умолчанию равняется 2. Используйте DistParameter, чтобы задать различную экспоненту P, где P является значением положительной скалярной величины экспоненты.

'chebychev'

Расстояние Чебычева (максимум координируют различие).

'cosine'

Один минус косинус включенного угла между точками (обработанный как векторы).

'correlation'

Один минус корреляция выборки между точками (обработанный как последовательности значений).

'hamming'

Расстояние Хемминга, которое является процентом координат, которые отличаются.

'jaccard'

Один минус коэффициент Jaccard, который является процентом ненулевых координат, которые отличаются.

'spearman'

Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений).

@distfun

Пользовательский указатель на функцию расстояния. Функция расстояния имеет форму

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
где

  • ZI является 1-by-n вектор, содержащий одно наблюдение.

  • ZJ является m2-by-n матрица, содержащая несколько наблюдений. distfun должен принять матричный ZJ с произвольным числом наблюдений.

  • D2 является m2-by-1 вектор расстояний, и D2(k) является расстоянием между наблюдениями ZI и ZJ(k,:).

Если ваши данные не разреженны, можно обычно вычислять расстояние более быстро при помощи встроенного расстояния вместо указателя на функцию.

Для определений смотрите Метрики Расстояния.

Когда вы используете 'seuclidean', 'minkowski' или 'mahalanobis', можно задать дополнительный входной параметр DistParameter, чтобы управлять этими метриками. Можно также использовать эти метрики таким же образом в качестве других метрик со значением по умолчанию DistParameter.

Пример: 'minkowski'

Метрические значения параметров расстояния, заданные как положительная скалярная величина, числовой вектор или числовая матрица. Этот аргумент допустим только, когда вы задаете Distance как 'seuclidean', 'minkowski' или 'mahalanobis'.

  • Если Distance является 'seuclidean', DistParameter является вектором масштабных коэффициентов для каждой размерности, заданной как положительный вектор. Значением по умолчанию является nanstd(X).

  • Если Distance является 'minkowski', DistParameter является экспонентой расстояния Минковскего, заданного как положительная скалярная величина. Значение по умолчанию равняется 2.

  • Если Distance является 'mahalanobis', DistParameter является ковариационной матрицей, заданной как числовая матрица. Значением по умолчанию является nancov(X). DistParameter должен быть симметричным и положительный определенный.

Пример: 'minkowski',3

Типы данных: single | double

Выходные аргументы

свернуть все

Попарные расстояния, возвращенные как числовой вектор - строка из длины m (m –1)/2, соответствуя парам наблюдений, где m является количеством наблюдений в X.

Расстояния располагаются в порядке (2,1), (3,1)..., (m, 1), (3,2)..., (m, 2)..., (m, m –1), т.е. нижний левый треугольник m-by-m матрица расстояния в порядке следования столбцов. Попарное расстояние между наблюдениями i и j находится в D((i-1)*(m-i/2)+j-i) для ij.

Можно преобразовать D в симметрическую матрицу при помощи функции squareform. Z = squareform(D) возвращает m-by-m матрица, где Z(i,j) соответствует попарному расстоянию между наблюдениями i и j.

Если наблюдение, i или j содержат NaN s, то соответствующим значением в D является NaN для встроенных функций расстояния.

D обычно используется в качестве матрицы несходства в кластеризации или многомерном масштабировании. Для получения дополнительной информации смотрите Иерархическую Кластеризацию и страницы ссылки на функцию для cmdscale, cophenet, linkage, mdscale и optimalleaforder. Эти функции берут D в качестве входного параметра.

Больше о

свернуть все

Метрики расстояния

Метрика расстояния является функцией, которая задает расстояние между двумя наблюдениями. pdist поддерживает различные метрики расстояния: Евклидово расстояние, стандартизированное Евклидово расстояние, расстояние Mahalanobis, расстояние городского квартала, расстояние Минковскего, расстояние Чебычева, расстояние косинуса, расстояние корреляции, Расстояние Хемминга, расстояние Jaccard и расстояние Копьеносца.

Учитывая m-by-n матрица данных X, который обработан как m (1 n) векторы - строки x1, x2..., xm, различные расстояния между векторным xs и xt, задан можно следующим образом:

  • Евклидово расстояние

    dst2=(xsxt)(xsxt).

    Евклидово расстояние является особым случаем расстояния Минковскего, где p = 2.

  • Стандартизированное Евклидово расстояние

    dst2=(xsxt)V1(xsxt),

    где V является n-by-n диагональная матрица, j которой th диагональный элемент (S (j)) 2, где S является вектором масштабных коэффициентов для каждой размерности.

  • Расстояние Mahalanobis

    dst2=(xsxt)C1(xsxt),

    где C является ковариационной матрицей.

  • Расстояние городского квартала

    dst=j=1n|xsjxtj|.

    Расстояние городского квартала является особым случаем расстояния Минковскего, где p = 1.

  • Расстояние Минковскего

    dst=j=1n|xsjxtj|pp.

    Для особого случая p = 1, расстояние Минковскего дает расстояние городского квартала. Для особого случая p = 2, расстояние Минковскего дает Евклидово расстояние. Для особого случая p = ∞, расстояние Минковскего дает расстояние Чебычева.

  • Расстояние Чебычева

    dst=max j{|xsjxtj|}.

    Расстояние Чебычева является особым случаем расстояния Минковскего, где p = ∞.

  • Расстояние косинуса

    dst=1xsxt(xsxs)(xtxt).

  • Расстояние корреляции

    dst=1(xsx¯s)(xtx¯t)(xsx¯s)(xsx¯s)(xtx¯t)(xtx¯t),

    где

    x¯s=1njxsj и x¯t=1njxtj.

  • Расстояние Хемминга

    dst=(#(xsjxtj)/n).

  • Расстояние Jaccard

    dst=#[(xsjxtj)((xsj0)(xtj0))]#[(xsj0)(xtj0)].

  • Расстояние копьеносца

    dst=1(rsr¯s)(rtr¯t)(rsr¯s)(rsr¯s)(rtr¯t)(rtr¯t),

    где

    • rsj является рангом xsj, принятого x 1j, x 2j... xmj, как вычислено tiedrank.

    • rs и rt являются координатно-мудрыми векторами ранга xs и xt, т.е. rs = (rs 1, rs 2... rsn).

    • r¯s=1njrsj=(n+1)2.

    • r¯t=1njrtj=(n+1)2.

Расширенные возможности

Представлено до R2006a