2011-02-08 18 views
12

Necesito una función MATLAB que intercambie 2 filas o 2 columnas entre sí en una matriz de tamaño arbitrario.Intercambio de filas y columnas

+2

¿Qué has probado ya? –

+1

no tengo idea de dónde empezar – Frank

+1

Más precisamente, [esta página] (http://www.mathworks.com/help/techdoc/learn_matlab/f2-12841.html) – Jonas

Respuesta

1

Esta función sólo funciona durante 2 dimensionales:

function matrix = swap(matrix,dimension,idx_a,idx_b) 

if dimension == 1 
    row_a = matrix(idx_a,:); 
    matrix(idx_a,:) = matrix(idx_b,:); 
    matrix(idx_b,:) = row_a; 
elseif dimension == 2 
    col_a = matrix(:,idx_a); 
    matrix(:,idx_a) = matrix(:,idx_b); 
    matrix(:,idx_b) = col_a; 
end 

Ejemplo de llamada:

>> A = rand(6,4) 

A = 

0.8350 0.5118 0.9521 0.9971 
0.1451 0.3924 0.7474 0.3411 
0.7925 0.8676 0.7001 0.0926 
0.4749 0.4040 0.1845 0.5406 
0.1285 0.0483 0.5188 0.2462 
0.2990 0.6438 0.1442 0.2940 

>> swap(A,2,1,3) 

ans = 

0.9521 0.5118 0.8350 0.9971 
0.7474 0.3924 0.1451 0.3411 
0.7001 0.8676 0.7925 0.0926 
0.1845 0.4040 0.4749 0.5406 
0.5188 0.0483 0.1285 0.2462 
0.1442 0.6438 0.2990 0.2940 

>> tic;A = swap(rand(1000),1,132,234);toc; 
Elapsed time is 0.027228 seconds. 
>> 
+0

He estado tratando de poner su fórmula en este formato, pero no funciona por alguna razón ... podría ayudarme una vez más OutputMat = RowOrColumnSwap (InputMat, RCindex1, RCIndex2, Dimension) – Frank

+2

No es necesario usar una variable temporal. Ver mi solución. – Jonas

65

Digamos que toma la matriz

>> A = magic(4) 
A = 
    16  2  3 13 
    5 11 10  8 
    9  7  6 12 
    4 14 15  1 

Si desea intercambiar, por ejemplo, columnas 3 y 1, escriba

>>A(:,[1 3]) = A(:,[3 1]) 

A = 
    3  2 16 13 
    10 11  5  8 
    6  7  9 12 
    15 14  4  1 

Lo mismo funciona para el intercambio de filas (es decir A([4 2],:) = A([2 4],:) para intercambiar las filas 2 y 4).

Cuestiones relacionadas