pdist2
Distancia por pares entre dos conjuntos de observaciones
Sintaxis
Descripción
devuelve la distancia usando la métrica especificada por D = pdist2(X,Y,Distance,DistParameter)Distance y DistParameter. Puede especificar DistParameter solo cuando Distance sea 'seuclidean', 'minkowski' o 'mahalanobis'.
, para cualquier argumento previo, modifica el cálculo usando parámetros de nombre-valor. Por ejemplo:D = pdist2(___,Name,Value)
D = pdist2(X,Y,Distance,'Smallest',K)calcula la distancia usando la métrica especificada porDistancey devuelve lasKdistancias entre pares más pequeñas hasta las observaciones enXpara cada observación enYen orden ascendente.D = pdist2(X,Y,Distance,DistParameter,'Largest',K)calcula la distancia usando la métrica especificada porDistanceyDistParametery devuelve lasKdistancias entre pares más grandes en orden descendente.
Ejemplos
Cree dos matrices con tres observaciones y dos variables.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
Calcule la distancia euclidiana. El valor predeterminado del argumento de entrada Distance es 'euclidean'. Cuando se calcula la distancia euclidiana sin utilizar un argumento de par nombre-valor, no es necesario especificar Distance.
D = pdist2(X,Y)
D = 3×3
0.5387 0.8018 0.1538
0.7100 0.5951 0.3422
0.8805 0.4242 1.2050
D(i,j) corresponde a la distancia entre pares entre la observación i en X y la observación j en Y.
Cree dos matrices con tres observaciones y dos variables.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
Calcule la distancia de Minkowski con el exponente predeterminado 2.
D1 = pdist2(X,Y,'minkowski')D1 = 3×3
0.5387 0.8018 0.1538
0.7100 0.5951 0.3422
0.8805 0.4242 1.2050
Calcule la distancia de Minkowski con un exponente de 1, que es igual a la distancia Manhattan.
D2 = pdist2(X,Y,'minkowski',1)D2 = 3×3
0.5877 1.0236 0.2000
0.9598 0.8337 0.3899
1.0189 0.4800 1.7036
D3 = pdist2(X,Y,'cityblock')D3 = 3×3
0.5877 1.0236 0.2000
0.9598 0.8337 0.3899
1.0189 0.4800 1.7036
Cree dos matrices con tres observaciones y dos variables.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
Encuentre las dos distancias euclidianas entre pares más pequeñas a las observaciones en X para cada observación en Y.
[D,I] = pdist2(X,Y,'euclidean','Smallest',2)
D = 2×3
0.5387 0.4242 0.1538
0.7100 0.5951 0.3422
I = 2×3
1 3 1
2 2 2
Para cada observación en Y, pdist2 encuentra las dos distancias más pequeñas calculando y comparando los valores de las distancias con todas las observaciones en X. Después, la función ordena las distancias en cada columna de D en orden ascendente. I contiene los índices de las observaciones en X correspondientes a las distancias en D.
Cree dos matrices grandes de puntos y, luego, mida el tiempo utilizado por pdist2 con la métrica de distancia predeterminada "euclidean".
rng default % For reproducibility N = 10000; X = randn(N,1000); Y = randn(N,1000); D = pdist2(X,Y); % Warm up function for more reliable timing information tic D = pdist2(X,Y); standard = toc
standard = 7.8404
A continuación, mida el tiempo utilizado por pdist2 con la métrica de distancia "fasteuclidean". Especifique un tamaño de caché de 100.
D = pdist2(X,Y,"fasteuclidean",CacheSize=100); % Warm up function tic D2 = pdist2(X,Y,"fasteuclidean",CacheSize=100); accelerated = toc
accelerated = 1.4593
Evalúe por qué factor es más rápido el cálculo acelerado en comparación con el estándar.
standard/accelerated
ans = 5.3726
La versión acelerada es más de dos veces más rápida en este ejemplo.
Establezca una función de distancia personalizada que ignore las coordenadas con valores NaN y calcule la distancia por pares usando esa función.
Cree dos matrices con tres observaciones y tres variables.
rng('default') % For reproducibility X = rand(3,3) Y = [X(:,1:2) rand(3,1)]
X =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
Y =
0.8147 0.9134 0.9649
0.9058 0.6324 0.1576
0.1270 0.0975 0.9706
Las primeras dos columnas de X e Y son idénticas. Supongamos que falta X(1,1).
X(1,1) = NaN
X =
NaN 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
Calcule la distancia de Hamming.
D1 = pdist2(X,Y,'hamming')
D1 =
NaN NaN NaN
1.0000 0.3333 1.0000
1.0000 1.0000 0.3333
Si la observación i en X o la observación j en Y contiene valores NaN, la función pdist2 devuelve NaN para la distancia entre pares entre i y j. Por lo tanto, D1(1,1), D1(1,2) y D1(1,3) son valores NaN.
Establezca una función de distancia personalizada nanhamdist que ignore las coordenadas con valores NaN y calcule la distancia de Hamming. Cuando trabaja con un número grande de observaciones, puede calcular la distancia con más rapidez creando un bucle que recorra todas las coordenadas de los datos.
function D2 = nanhamdist(XI,XJ) %NANHAMDIST Hamming distance ignoring coordinates with NaNs [m,p] = size(XJ); nesum = zeros(m,1); pstar = zeros(m,1); for q = 1:p notnan = ~(isnan(XI(q)) | isnan(XJ(:,q))); nesum = nesum + ((XI(q) ~= XJ(:,q)) & notnan); pstar = pstar + notnan; end D2 = nesum./pstar;
Calcule la distancia con nanhamdist pasando el identificador de la función como un argumento de entrada de pdist2.
D2 = pdist2(X,Y,@nanhamdist)
D2 =
0.5000 1.0000 1.0000
1.0000 0.3333 1.0000
1.0000 1.0000 0.3333
kmeans lleva a cabo agrupamiento de k-medias para dividir datos en k grupos. Cuando tenga un nuevo conjunto de datos que agrupar, puede crear nuevos grupos que incluyan los datos existentes y los nuevos datos utilizando kmeans. La función kmeans es compatible con la generación de código C/C++, de modo que puede generar código que acepte los datos de entrenamiento, devuelva los resultados del agrupamiento y, después, implemente el código en un dispositivo. En este flujo de trabajo, debe pasar los datos de entrenamiento, que pueden tener un tamaño considerable. Para ahorrar memoria en el dispositivo, puede separar el entrenamiento y la predicción por uso de kmeans y pdist2, respectivamente.
Utilice kmeans para crear grupos en MATLAB® y utilice pdist2 en el código generado para asignar nuevos datos a grupos existentes. Para la generación de código, defina una función de punto de entrada que acepte las posiciones de los centroides de los grupos y el nuevo conjunto de datos, y devuelva el índice del grupo más cercano. Después, genere código para la función de punto de entrada.
Generar código C/C++ requiere MATLAB® Coder™.
Llevar a cabo agrupamiento de k-medias
Genere un conjunto de datos de entrenamiento con tres distribuciones.
rng('default') % For reproducibility X = [randn(100,2)*0.75+ones(100,2); randn(100,2)*0.5-ones(100,2); randn(100,2)*0.75];
Divida los datos de entrenamiento en tres grupos con kmeans.
[idx,C] = kmeans(X,3);
Represente los grupos y sus centroides.
figure gscatter(X(:,1),X(:,2),idx,'bgm') hold on plot(C(:,1),C(:,2),'kx') legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid')

Asignar nuevos datos a grupos existentes
Genere un conjunto de datos de prueba.
Xtest = [randn(10,2)*0.75+ones(10,2);
randn(10,2)*0.5-ones(10,2);
randn(10,2)*0.75];Clasifique el conjunto de datos de prueba usando los grupos existentes. Encuentre el centroide más cercano de cada punto de datos de prueba con pdist2.
[~,idx_test] = pdist2(C,Xtest,'euclidean','Smallest',1);
Represente los datos de prueba y etiquete los datos de prueba con idx_test utilizando gscatter.
gscatter(Xtest(:,1),Xtest(:,2),idx_test,'bgm','ooo') legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid', ... 'Data classified to Cluster 1','Data classified to Cluster 2', ... 'Data classified to Cluster 3')

Generar código
Genere código C que asigne nuevos datos a los grupos existentes. Tenga en cuenta que generar código C/C++ requiere MATLAB® Coder™.
Defina una función de punto de entrada llamada findNearestCentroid que acepte las posiciones de los centroides y nuevos datos, y encuentre el grupo más cercano con pdist2.
Añada la directiva del compilador (o pragma) %#codegen a la función de punto de entrada después de la firma de la función para indicar que intenta generar código para el algoritmo de MATLAB. Añadir esta directiva instruye al analizador de código de MATLAB para ayudarle a diagnosticar y arreglar brechas que provocarían errores durante la generación de código.
type findNearestCentroid % Display contents of findNearestCentroid.m
function idx = findNearestCentroid(C,X) %#codegen [~,idx] = pdist2(C,X,'euclidean','Smallest',1); % Find the nearest centroid
Nota: si hace clic en el botón ubicado en la zona superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abrirá la carpeta de ejemplo. Esta carpeta incluye el archivo de función de punto de entrada.
Genere código mediante codegen (MATLAB Coder). Dado que C y C++ son lenguajes de tipado estático, debe determinar las propiedades de todas las variables de la función de entrada en tiempo de compilación. Para especificar los tipos de datos y el tamaño de arreglo de las entradas de findNearestCentroid, pase una expresión de MATLAB que represente el conjunto de valores con un tipo de datos y un tamaño de arreglo determinado con la opción -args. Para obtener más detalles, consulte Specify Variable-Size Arguments for Code Generation.
codegen findNearestCentroid -args {C,Xtest}
Code generation successful.
codegen genera la función MEX de findNearestCentroid_mex con una extensión dependiente de la plataforma.
Compruebe el código generado.
myIndx = findNearestCentroid(C,Xtest); myIndex_mex = findNearestCentroid_mex(C,Xtest); verifyMEX = isequal(idx_test,myIndx,myIndex_mex)
verifyMEX = logical
1
isequal devuelve una lógica 1 (true), que implica que todas las entradas son iguales. La comparación confirma que la función pdist2, la función findNearestCentroid y la función MEX vuelven al mismo índice.
También puede generar código optimizado CUDA® con GPU Coder™.
cfg = coder.gpuConfig('mex'); codegen -config cfg findNearestCentroid -args {C,Xtest}
Para obtener más información sobre generación de código, consulte General Code Generation Workflow. Para obtener más información sobre GPU coder, consulte Get Started with GPU Coder (GPU Coder) y Supported Functions (GPU Coder).
Argumentos de entrada
Datos de entrada, especificados como matriz numérica. X es una matriz de mx por n e Y es una matriz de my por n. Las filas corresponden a observaciones individuales, mientras que las columnas corresponden a variables individuales.
Tipos de datos: single | double
Métrica de distancia, especificada como un vector de caracteres, un escalar de cadena o un identificador de función, tal y como se describe en la tabla siguiente.
| Valor | Descripción |
|---|---|
'euclidean' | Distancia euclidiana (valor predeterminado) |
'squaredeuclidean' | Distancia euclidiana cuadrada. (Esta opción solo se ofrece para mejorar la eficiencia. No resuelve la desigualdad triangular). |
'seuclidean' | Distancia euclidiana estandarizada. Cada diferencia de las coordenadas entre las observaciones se escala dividiendo por el elemento correspondiente de la desviación estándar, |
'fasteuclidean' | Distancia euclidiana calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos. |
'fastsquaredeuclidean' | Distancia euclidiana cuadrada calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos. |
'fastseuclidean' | Distancia euclidiana estandarizada calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos. |
'mahalanobis' | Distancia de Mahalanobis, calculada usando la covarianza de muestra de |
'cityblock' | Distancia Manhattan |
'minkowski' | Distancia de Minkowski. El exponente predeterminado es 2. Use |
'chebychev' | Distancia de Chebyshov (diferencia de coordenada máxima) |
'cosine' | Uno menos el coseno del ángulo incluido entre puntos (tratados como vectores) |
'correlation' | Uno menos la correlación de la muestra entre los puntos (tratados como secuencias de valores) |
'hamming' | Distancia de Hamming, que es el porcentaje de coordenadas que difieren |
'jaccard' | Uno menos el coeficiente de Jaccard, que es el porcentaje de coordenadas, que no son cero, que difieren |
'spearman' | Uno menos la correlación del coeficiente de Spearman entre observaciones (tratadas como secuencias de valores) |
@ | Identificador de función de la distancia personalizada. Una función de distancia tiene esta forma: function D2 = distfun(ZI,ZJ) % calculation of distance ...
Si sus datos no son dispersos, por lo general, podrá calcular las distancias más rápido usando una métrica de distancia integrada en lugar de un identificador de función. |
Para ver las definiciones, consulte Métricas de distancia.
Cuando use 'seuclidean', 'minkowski' o 'mahalanobis', podrá especificar un argumento de entrada adicional DistParameter para controlar estas métricas. También puede usar estas métricas de la misma manera que el resto de métricas con el valor predeterminado de DistParameter.
Ejemplo: 'minkowski'
Tipos de datos: char | string | function_handle
Los valores del parámetro de una métrica de distancia, especificados como un escalar positivo, un vector numérico o una matriz numérica. Este argumento solo es válido cuando se especifica Distance como 'seuclidean', 'minkowski' o 'mahalanobis'.
Si
Distancees'seuclidean',DistParameteres un vector de factores de escalado de cada dimensión, especificado como un vector positivo. El valor predeterminado esstd(X,'omitnan').Si
Distancees'minkowski',DistParameteres el exponente de la distancia de Minkowski, especificado como un escalar positivo. El valor predeterminado es 2.Si
Distancees'mahalanobis',DistParameteres una matriz de covarianzas, especificada cono una matriz numérica. El valor predeterminado escov(X,'omitrows').DistParameterdebe ser simétrica y definida positiva.
Ejemplo: 'minkowski',3
Tipos de datos: single | double
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.
En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name entre comillas.
Ejemplo: 'Smallest',K o 'Largest',K. No puede utilizar 'Smallest' y 'Largest' a la vez.
Tamaño de la matriz de Gram en megabytes, especificado como un escalar positivo o 'maximal'. La función pdist2 puede usar CacheSize solo cuando el argumento Distance empiece por fast.
Si 'maximal', pdist2 intenta asignar suficiente memoria para una matriz intermedia entera cuyo tamaño es MX por MY, donde MX es el número de filas de los datos de entrada X y MY es el número de filas de los datos de entrada Y. El tamaño de la caché no tiene que ser lo suficientemente grande para una matriz intermedia completa, pero debe ser al menos lo suficientemente grande como para contener un vector de MX por 1. De lo contrario, pdist2 usa el algoritmo normal para calcular la distancia euclidiana.
Si el argumento de la distancia empieza por fast y CacheSize es demasiado grande o es 'maximal', pdist2 puede intentar asignar una matriz de Gram que supere la memoria disponible. En este caso, MATLAB® muestra un error.
Ejemplo: CacheSize='maximal'
Tipos de datos: double | char | string
Número de distancias más pequeñas que se desea encontrar, especificado como el par separado por comas que consta de 'Smallest' y un entero positivo. Si especifica 'Smallest', pdist2 ordena las distancias en cada columna de D en orden ascendente. Solo puede usar uno de los argumentos Smallest y Largest.
Ejemplo: 'Smallest',3
Tipos de datos: single | double
Número de distancias más grandes que se desea encontrar, especificado como el par separado por comas que consta de 'Largest' y un entero positivo. Si especifica 'Largest', pdist2 ordena las distancias en cada columna de D en orden descendente. Solo puede usar uno de los argumentos Smallest y Largest.
Ejemplo: 'Largest',3
Tipos de datos: single | double
Argumentos de salida
Distancias entre pares, devueltas como matriz numérica.
Si no especifica 'Smallest' o 'Largest', D es una matriz de mx por my, donde mx y my son el número de observaciones en X e Y, respectivamente. D(i,j) es la distancia entre la observación i en X y la observación j en Y. Si la observación i en X o la observación j en Y contiene valores NaN, D(i,j) es NaN para las funciones de distancia integradas.
Si especifica 'Smallest' o 'Largest' como K, D es una matriz de K por my. D contiene las distancias entre pares más pequeñas de K o más grandes de K hasta las observaciones en X para cada observación en Y. Para cada observación en Y, pdist2 encuentra las K distancias más pequeñas o más grandes calculando y comparando los valores de las distancias con todas las observaciones en X. Si K es mayor que mx, pdist2 devuelve una matriz de mx por my.
Más acerca de
Una métrica de distancia es una función que define la distancia entre dos observaciones. pdist2 admite varias métricas de distancia: distancia euclidiana, distancia euclidiana estandarizada, distancia de Mahalanobis, distancia Manhattan, distancia de Minkowski, distancia de Chebyshov, distancia del coseno, distancia de correlación, distancia de Hamming, distancia de Jaccard y distancia de Spearman.
Si tenemos una matriz de datos de mx por n X, que se trata como vectores fila mx (1 por n) x1, x2, ..., xmx, y una matriz de datos de my por n Y, que se trata como vectores fila my (1 por n) y1, y2, ...,ymy, las diferentes distancias entre el vector xs y yt se definen de esta manera:
Distancia euclidiana
La distancia euclidiana es un caso especial de la distancia de Minkowski, donde p = 2.
Especifique la distancia euclidiana estableciendo el parámetro
Distanceen'euclidean'.Distancia euclidiana estandarizada
donde V es la matriz diagonal de n por n cuyo elemento diagonal número j es (S(j))2, donde S es un vector de factores de escalado de cada dimensión.
Especifique la distancia euclidiana estandarizada estableciendo el parámetro
Distanceen'seuclidean'.La distancia euclidiana rápida es la misma que la distancia euclidiana, calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. No admite datos dispersos. Consulte Algoritmo de distancia euclidiana rápida.
Especifique la distancia euclidiana rápida estableciendo el parámetro
Distanceen'fasteuclidean'.La distancia euclidiana rápida estandarizada es la misma que la distancia euclidiana estandarizada, calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. No admite datos dispersos. Consulte Algoritmo de distancia euclidiana rápida.
Especifique la distancia euclidiana rápida estandarizada estableciendo el parámetro
Distanceen'fastseuclidean'.Distancia de Mahalanobis
donde C es la matriz de covarianzas.
Especifique la distancia de Mahalanobis estableciendo el parámetro
Distanceen'mahalanobis'.Distancia Manhattan
La distancia Manhattan es un caso especial de la distancia de Minkowski, donde p = 1.
Especifique la distancia Manhattan estableciendo el parámetro
Distanceen'cityblock'.Distancia de Minkowski
Para el caso especial de p = 1, la distancia de Minkowski ofrece la distancia Manhattan. Para el caso especial de p = 2, la distancia de Minkowski ofrece la distancia euclidiana. Para el caso especial de p = ∞, la distancia de Minkowski ofrece la distancia de Chebyshov.
Especifique la distancia de Minkowski estableciendo el parámetro
Distanceen'minkowski'.Distancia de Chebyshov
La distancia de Chebyshov es un caso especial de la distancia de Minkowski, donde p = ∞.
Especifique la distancia de Chebyshov estableciendo el parámetro
Distanceen'chebychev'.Distancia del coseno
Especifique la distancia del coseno estableciendo el parámetro
Distanceen'cosine'.Distancia de correlación
donde
y
Especifique la distancia de correlación estableciendo el parámetro
Distanceen'correlation'.La distancia de Hamming es el porcentaje de coordenadas que difieren:
Especifique la distancia de Hamming estableciendo el parámetro
Distanceen'hamming'.La distancia de Jaccard es uno menos el coeficiente de Jaccard, que es el porcentaje de coordenadas que no son cero que difieren:
Especifique la distancia de Jaccard estableciendo el parámetro
Distanceen'jaccard'.La distancia de Spearman es uno menos la correlación del coeficiente de Spearman entre observaciones (tratadas como secuencias de valores):
donde
Especifique la distancia de Spearman estableciendo el parámetro
Distanceen'spearman'.
Algoritmos
Los valores del argumento Distance que empiezan con fast (como 'fasteuclidean' y 'fastseuclidean') calculan distancias euclidianas utilizando un algoritmo que utiliza memoria adicional para ahorrar tiempo de cálculo. Este algoritmo se denomina "Euclidean Distance Matrix Trick" en Albanie [1] y en otros lugares. Las pruebas internas muestran que este algoritmo ahorra tiempo cuando el número de predictores es al menos 10. Los algoritmos que empiezan con 'fast' no admiten datos dispersos.
Para encontrar la matriz D de distancias entre todos los puntos xi y xj, donde cada xi tiene n variables, el algoritmo calcula la distancia usando la línea final de las ecuaciones siguientes:
La matriz de la última línea de las ecuaciones se denominada la matriz de Gram. Cuando se calcula y se utiliza la matriz de Gram en lugar de calcular las distancias al cuadrado mediante el cuadrado y la suma, calcular el conjunto de distancias cuadradas es más rápido, pero ligeramente menos estable numéricamente. Para obtener más información, consulte Albanie [1].
Para almacenar la matriz de Gram, el software usa una caché con el tamaño predeterminado de 1e3 megabytes. Puede establecer el tamaño de la caché utilizando el argumento de nombre-valor CacheSize. Si el valor de CacheSize es demasiado grande o "maximal", pdist2 puede intentar asignar una matriz de Gram que supere la memoria disponible. En este caso, MATLAB muestra un error.
Referencias
[1] Albanie, Samuel. Euclidean Distance Matrix Trick. June, 2019. Available at https://www.robots.ox.ac.uk/%7Ealbanie/notes/Euclidean_distance_trick.pdf.
Capacidades ampliadas
Notas y limitaciones de uso:
La primera entrada
Xdebe ser un arreglo alto. La entradaYno puede ser un arreglo alto.
Para obtener más información, consulte Arreglos altos.
Notas y limitaciones de uso:
El valor del argumento de entrada de distancia (
Distance) debe ser una constante en tiempo de compilación. Por ejemplo, para usar la distancia de Minkowski, incluyacoder.Constant('Minkowski')en el valor-argsdecodegen.El valor del argumento de entrada de distancia (
Distance) no puede ser una función de distancia personalizada.pdist2no admite la generación de código para cálculos rápidos de distancia euclidiana, lo que significa que no es compatible con las métricas de distancia cuyos nombres empiezan confast(por ejemplo,'fasteuclidean').Los nombres de los argumentos nombre-valor deben ser constantes en tiempo de compilación. Por ejemplo, para utilizar el argumento de par nombre-valor
'Smallest'en el código generado, incluya{coder.Constant('Smallest'),0}en el valor-argsdecodegen(MATLAB Coder).La posición en el orden para distancias idénticas en el código generado puede diferir del orden en MATLAB debido a la precisión numérica.
El código generado de
pdist2usaparfor(MATLAB Coder) para crear bucles que se ejecutan en paralelo en las plataformas de núcleos múltiples de memoria compartida compatibles en el código generado. Si su compilador no es compatible con la interfaz de la aplicación de multiprocesamiento abierto (OpenMP) o desactiva la biblioteca OpenMP, MATLAB Coder™ trata los buclesparforcomo buclesfor. Para encontrar compiladores compatibles, consulte compiladores compatibles. Para desactivar la biblioteca OpenMP, establezca la propiedadEnableOpenMPdel objeto de configuración comofalse. Para obtener más detalles, consultecoder.CodeConfig(MATLAB Coder).pdist2devuelve índices de tipo de valor entero (int32) en código C/C++ independiente generado. Por lo tanto, la función permite un soporte de precisión simple estricto cuando utiliza entradas de precisión simple. Para la generación de código MEX, la función sigue devolviendo índices de precisión doble para igualar el comportamiento de MATLAB.
Para obtener más información sobre la generación de código, consulte Introduction to Code Generation y General Code Generation Workflow.
Notas y limitaciones de uso:
Los argumentos de entrada de distancia compatibles (
Distance) para el código CUDA optimizado son'euclidean','squaredeuclidean','seuclidean','cityblock','minkowski','chebychev','cosine','correlation','hamming'y'jaccard'.Distanceno puede ser una función de distancia personalizada.Distancedebe ser una constante en tiempo de compilación.Los nombres en los argumentos de par nombre-valor deben ser constantes de tiempo de compilación.
La posición en el orden para distancias idénticas en el código generado puede diferir del orden en MATLAB debido a la precisión numérica.
Notas y limitaciones de uso:
No puede especificar el argumento de entrada
Distancecomo"fasteuclidean","fastsquaredeuclidean","fastseuclidean"o una función de distancia personalizada.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido en R2010aLas métricas de 'fasteuclidean', 'fastseuclidean' y 'fastsquaredeuclidean'Distance aceleran el cálculo de las distancias euclidianas utilizando una caché y un algoritmo diferente (consulte Algoritmos). Establezca el tamaño de la caché utilizando el argumento de nombre-valor CacheSize.
Consulte también
pdist | createns | knnsearch | ExhaustiveSearcher | KDTreeSearcher
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)