Prueba esto de una sola línea (donde Un es su matriz de cruce y B es el valor para eliminar):
A = [-4.0 0.5;
-2.0 0.5;
2.0 3.0;
4.0 0.5;
-2.0 0.5];
B = [-2.0 0.5];
A = A(~all(A == repmat(B,size(A,1),1),2),:);
Entonces sólo tiene que repetir la última línea para cada nuevo B desea para eliminar.
EDIT:
... y aquí es otra opción:
A = A((A(:,1) ~= B(1)) | (A(:,2) ~= B(2)),:);
ADVERTENCIA: Las respuestas aquí son los más utilizados para los casos en que no se espera que los errores de coma flotante pequeña (es decir, con valores enteros). Como se indica en este follow-up question, el uso de los operadores "==" y "~ =" puede causar resultados no deseados. En tales casos, las opciones anteriores deberían modificarse para usar operadores relacionales en lugar de operadores de igualdad. Por ejemplo, la segunda opción que agregué se cambió a:
tolerance = 0.001; % Or whatever limit you want to set
A = A((abs(A(:,1)-B(1)) > tolerance) | (abs(A(:,2)-B(2)) > tolerance),:);
¡Solo una rápida cabeza arriba! =)
POCO DE TIEMPO rudimentaria:
En caso de que alguien era realmente interesados en la eficiencia, que acabo de hacer un poco de tiempo simple para tres maneras diferentes de obtener el subíndice de la matriz (los dos opciones que he mencionado anteriormente y la opción STRMATCH Fanfan's):
>> % Timing for option #1 indexing:
>> tic; for i=1:10000, index = ~all(A == repmat(B,size(A,1),1),2); end; toc;
Elapsed time is 0.262648 seconds.
>> % Timing for option #2 indexing:
>> tic; for i=1:10000, index = (A(:,1) ~= B(1)) | (A(:,2) ~= B(2)); end; toc;
Elapsed time is 0.100858 seconds.
>> % Timing for STRMATCH indexing:
>> tic; for i=1:10000, index = strmatch(B,A); end; toc;
Elapsed time is 0.192306 seconds.
Como se puede ver, la opción STRMATCH es más rápido que mi primera sugerencia, pero mi segunda sugerencia es la más rápida de las tres. Sin embargo, tenga en cuenta que mis opciones y Fanfan hacen cosas ligeramente diferentes: mis opciones devuelven los índices lógicos de las filas mantener, y los índices lineales devueltos de Fanfan de las filas a eliminar.Es por eso que la opción STRMATCH utiliza la forma:
A(index,:) = [];
mientras que la mía, utilice el formulario:
A = A(index,:);
Sin embargo, mis índices se pueden negar a utilizar la primera forma (filas de indexación a eliminar):
A(all(A == repmat(B,size(A,1),1),2),:) = []; % For option #1
A((A(:,1) == B(1)) & (A(:,2) == B(2)),:) = []; % For option #2
casi me da un vector solución, pero no un poco más detallado de lo suyo. Buen trazador de líneas. – Azim
WoW ... manera tan elegante .... –