Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

rangesearch

Buscar todos los vecinos dentro de la distancia especificada utilizando datos de entrada

Descripción

Idx = rangesearch(X,Y,r) encuentra todos los puntos que están dentro de la distancia de los puntos.XrY Las filas de y corresponden a las observaciones, y las columnas corresponden a las variables.XY

ejemplo

[Idx,D] = rangesearch(X,Y,r) también devuelve las distancias entre los puntos y los puntos que se encuentran a una distancia de.YXr

ejemplo

[Idx,D] = rangesearch(X,Y,r,Name,Value) especifica opciones adicionales mediante uno o varios argumentos de par nombre-valor. Por ejemplo, puede especificar el método de búsqueda de vecino más cercano y la métrica de distancia utilizada en la búsqueda.

Ejemplos

contraer todo

Encuentre los puntos que están dentro de una distancia euclidiana de cada punto.X1.5Y Ambos y son muestras de variables de cinco dimensiones distribuidas normalmente.XY

rng('default') % For reproducibility X = randn(100,5); Y = randn(10,5); [Idx,D] = rangesearch(X,Y,1.5)
Idx = 10x1 cell array
    {1x7  double}
    {1x2  double}
    {1x11 double}
    {1x2  double}
    {1x12 double}
    {1x9  double}
    {[       89]}
    {1x0  double}
    {1x0  double}
    {1x0  double}

D = 10x1 cell array
    {1x7  double}
    {1x2  double}
    {1x11 double}
    {1x2  double}
    {1x12 double}
    {1x9  double}
    {[   1.1739]}
    {1x0  double}
    {1x0  double}
    {1x0  double}

En este caso, los tres últimos puntos están más que lejos de cualquier punto. está lejos de distancia de, y ningún otro punto está a poca distancia de. contiene puntos dentro de la distancia de.Y1.5XX(89,:)1.1739Y(7,:)X1.5Y(7,:)X121.5Y(5,:)

Genere 5000 puntos aleatorios de cada una de las tres distribuciones normales multivariadas distintas. Cambie los medios de las distribuciones para que los puntos generados aleatoriamente puedan formar tres clústeres separados.

rng('default')  % For reproducibility N = 5000; dist = 10; X = [mvnrnd([0 0],eye(2),N);      mvnrnd(dist*[1 1],eye(2),N);      mvnrnd(dist*[-1 -1],eye(2),N)];

Para cada punto en, encuentre los puntos en que están dentro de un radio lejos del punto.XXdist Para un cálculo más rápido, especifique para mantener los índices de los vecinos más cercanos sin clasificar. Seleccione el primer punto en X y busque sus vecinos más cercanos.

Idx = rangesearch(X,X,dist,'SortIndices',false); x = X(1,:); nearestPoints = X(Idx{1},:);

Encuentre los valores que no son los vecinos más cercanos de.Xx Visualice esos puntos en un color y los vecinos más cercanos de un color diferente.x Etiquete el punto con un círculo negro lleno.x

nonNearestIdx = true(size(X,1),1); nonNearestIdx(Idx{1}) = false;  scatter(X(nonNearestIdx,1),X(nonNearestIdx,2)) hold on scatter(nearestPoints(:,1),nearestPoints(:,2)) scatter(x(1),x(2),'black','filled') hold off

Encuentre a los pacientes en el conjunto de datos que están dentro de una cierta edad y rango de peso de los pacientes en.patientsY

Cargue el conjunto de datos.patients Los valores son en años, y los valores están en libras.AgeWeight

load patients X = [Age Weight]; Y = [20 162; 30 169; 40 168];   % New patients

Cree una función de distancia personalizada que determine la distancia entre los pacientes en términos de edad y peso.distfun Por ejemplo, según, dos pacientes que tienen un año de diferencia en la edad y tienen el mismo peso son una unidad de distancia aparte.distfun Del mismo modo, dos pacientes que tienen la misma edad y están cinco libras aparte en peso también son una unidad de distancia aparte.

type distfun.m % Display contents of distfun.m file
function D2 = distfun(ZI,ZJ) ageDifference = abs(ZI(1)-ZJ(:,1)); weightDifference = abs(ZI(2)-ZJ(:,2)); D2 = ageDifference + 0.2*weightDifference; end 

Si pulsa el botón situado en la sección superior derecha de este ejemplo y abre el ejemplo en MATLAB®, MATLAB abre la carpeta de ejemplo.Nota: Esta carpeta incluye el archivo de función.distfun.m

Encuentra a los pacientes que están dentro de la distancia de los pacientes en.X2Y

[Idx,D] = rangesearch(X,Y,2,'Distance',@distfun)
Idx = 3x1 cell array
    {1x0 double}
    {1x0 double}
    {[      41]}

D = 3x1 cell array
    {1x0 double}
    {1x0 double}
    {[  1.8000]}

El tercer paciente es el único que tiene un paciente dentro de una distancia de.YX2

Mostrar los valores del paciente más cercano al paciente con la edad y el peso.AgeWeightX40168

X(Idx{3},:)
ans = 1×2

    39   164

Argumentos de entrada

contraer todo

Datos de entrada, especificados como una matriz numérica, donde cada fila representa un punto unidimensional.mxnn El número de columnas debe ser igual al número de columnas.nY

Tipos de datos: single | double

Puntos de consulta, especificados como una matriz numérica, donde cada fila representa un punto unidimensional.mynn El número de columnas debe ser igual al número de columnas.nX

Tipos de datos: single | double

Radio de búsqueda alrededor de cada punto de consulta, especificado como un escalar no negativo. encuentra todos los puntos (filas) que están dentro de la distancia de cada punto.rangesearchXrY El significado de la distancia depende del argumento de par nombre-valor.'Distance'

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: especifica para encontrar todas las observaciones dentro de la distancia de cada observación en, utilizando una distancia euclidiana estandarizada escalado por el rango intercuartil de.rangesearch(X,Y,1.4,'Distance','seuclidean','Scale',iqr(X))X1.4YX

Método de búsqueda de vecino más cercano, especificado como el par separado por comas que consta de uno de estos valores.'NSMethod'

ValorDescripción
'kdtree'

Cree y utilice un árbol d para encontrar los vecinos más cercanos. sólo es válida cuando la métrica de distancia es una de estas opciones:K'kdtree'

  • 'chebychev'

  • 'cityblock'

  • 'euclidean'

  • 'minkowski'

'exhaustive'Utilice el algoritmo de búsqueda exhaustiva. El software calcula las distancias de todos los puntos a cada punto para encontrar los vecinos más cercanos.XY

es el valor predeterminado cuando el número de columnas en es menor o igual que, no es disperso y la métrica de distancia es una de las métricas válidas.'kdtree'X10X'kdtree' De lo contrario, el valor predeterminado es.'exhaustive'

Ejemplo: 'NSMethod','exhaustive'

Métrica de distancia que utiliza, especificada como el par separado por comas que consta de y uno de los valores de esta tabla.rangesearch'Distance'

ValorDescripción
'euclidean'Distancia euclidiana.
'seuclidean'Distancia euclidiana estandarizada. Cada diferencia de coordenadas entre una fila y un punto de consulta se escala dividiendo por el elemento correspondiente de la desviación estándar calculada a partir de,.XXnanstd(X) Para especificar otro escalado, use el argumento de par nombre-valor.'Scale'
'mahalanobis'Distancia de Mahalanobis, calculada utilizando una matriz de covarianza definida positiva.C El valor predeterminado de es la matriz de covarianza de ejemplo de, según lo calculado por.CXnancov(X) Para especificar un valor diferente para, utilice el argumento de par nombre-valor.C'Cov'
'cityblock'Distancia de bloque de ciudad.
'minkowski'Distancia Minkowski. El exponente predeterminado es.2 Para especificar un exponente diferente, utilice el argumento de par nombre-valor.'P'
'chebychev'Chebychev distancia (diferencia máxima de coordenadas).
'cosine'Uno menos el coseno del ángulo incluido entre las observaciones (tratadas como vectores).
'correlation'Uno menos la correlación lineal de muestra entre las observaciones (tratadas como secuencias de valores).
'hamming'Distancia de Hamming, el porcentaje de coordenadas que difieren.
'jaccard'Uno menos el coeficiente Jaccard, el porcentaje de coordenadas distintas de cero que difieren.
'spearman'Uno menos la correlación de rango de Spearman de muestra entre las observaciones (tratadas como secuencias de valores).
@distfun

Mango de función de distancia personalizado. Una función de distancia tiene la forma donde

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

  • es un 1 por vector que contiene una fila de o.ZInXY

  • es una-por-matriz que contiene varias filas de o.ZJmnXY

  • es un vector de distancias de-por-1, y es la distancia entre las observaciones y.D2mD2(j)ZIZJ(j,:)

Para obtener más información, consulte.Las métricas de distancia

Ejemplo: 'Distance','minkowski'

Exponente de la métrica de distancia Minkowski, especificada como el par separado por comas que consta de un escalar positivo.'P' Este argumento sólo es válido si es.'Distance''minkowski'

Ejemplo: 'P',4

Tipos de datos: single | double

Matriz de covarianza para la métrica de distancia de Mahalanobis, especificada como el par separado por comas que consta de una matriz definida positiva.'Cov' Este argumento sólo es válido cuando es.'Distance''mahalanobis'

Ejemplo: 'Cov',eye(4)

Tipos de datos: single | double

Valor de parámetro de escala para la métrica de distancia euclidiana estandarizada, especificada como el par separado por comas que consta de un vector no negativo. tiene una longitud igual al número de columnas en.'Scale'ScaleX Cada diferencia de coordenadas entre una fila en y un punto de consulta se escala por el elemento correspondiente de.XScale Este argumento sólo es válido cuando es.'Distance''seuclidean'

Ejemplo: 'Scale',iqr(X)

Tipos de datos: single | double

Número máximo de puntos de datos en el nodo hoja del árbol-d, especificado como el par separado por comas que consta de un escalar entero positivo.K'BucketSize' Este argumento sólo es válido cuando es.NSMethod'kdtree'

Ejemplo: 'BucketSize',20

Tipos de datos: single | double

Marcar para ordenar los índices devueltos según la distancia, especificado como el par separado por comas que consta de y cualquiera () o ().'SortIndices'true1false0

Para obtener un rendimiento más rápido cuando contiene muchas observaciones que tienen muchos puntos más cercanos, se puede establecer en.YXSortIndicesfalse En este caso, devuelve los índices de los puntos más cercanos sin ningún orden en particular.rangesearch Cuando es, la función organiza los índices de los puntos más cercanos en orden ascendente por distancia.SortIndicestrue

Ejemplo: 'SortIndices',false

Tipos de datos: logical

Argumentos de salida

contraer todo

Índices de puntos más cercanos, devueltos como un array de celdas de vectores numéricos.

es una matriz de celdas, donde está el número de filas.Idxmy1myY El vector contiene los índices de puntos (filas) en cuyas distancias no son mayores que.Idx{j}XY(j,:)r Si es así, organiza los índices en orden ascendente por distancia.SortIndicestruerangesearch

Distancias de los puntos más cercanos a los puntos de consulta, devueltos como una matriz de celdas de vectores numéricos.

es una matriz de celdas, donde está el número de filas. contiene los valores de distancia entre y los puntos (filas) en.Dmy1myYD{j}Y(j,:)X(Idx{j},:) Si es así, organiza las distancias en orden ascendente.SortIndicestruerangesearch

Sugerencias

  • Para un valor real positivo fijo, encuentra todos los puntos que están dentro de una distancia de cada punto.rrangesearchXrY Para encontrar los puntos más cercanos a cada punto, para un entero positivo fijo, utilice.kXYkknnsearch

  • no guarda un objeto de búsqueda.rangesearch Para crear un objeto de búsqueda, utilice.createns

Algoritmos

Funcionalidad alternativa

Si establece el argumento de par nombre-valor de función en el valor adecuado (para un algoritmo de búsqueda exhaustivo o para un algoritmo de árbol d), los resultados de la búsqueda equivalen a los resultados obtenidos mediante la realización de una búsqueda a distancia mediante la función de objeto.rangesearch'NSMethod''exhaustive''kdtree'Krangesearch A diferencia de la función, la función de objeto requiere un objeto de modelo o.rangesearchrangesearchExhaustiveSearcherKDTreeSearcher

Capacidades ampliadas

Introducido en R2011b