交换行和列

Fra*_*nk 13 arrays matlab

我需要一个MATLAB函数,它将在任意大小的矩阵中互换2行或2列.

Jon*_*nas 68

假设你拿矩阵

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

如果你想交换,比如第3列和第1列,你就写了

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

A =
     3     2    16    13
    10    11     5     8
     6     7     9    12
    15    14     4     1
Run Code Online (Sandbox Code Playgroud)

交换行(即A([4 2],:) = A([2 4],:)交换行2和4)也是如此.


Mie*_*ter 2

该函数仅适用于二维数组:

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
Run Code Online (Sandbox Code Playgroud)

调用示例:

>> 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.
>> 
Run Code Online (Sandbox Code Playgroud)

  • 无需使用临时变量。请参阅我的解决方案。 (2认同)