2

有没有办法在 matlab 中交换两列,以便可以在一个语句中完成?我知道A(:,[i,j])=A(:,[j,i])可以完成这项工作。但我希望它是形式swap_column(A, i, j)。是否有这样的内置或仅使用内置的简单操作?

4

2 回答 2

3

两种可能:

  1. 如果您同意,A=swap_cols(A,i,j);那么您只需编写一个函数

    function A = swap_cols(A,i,j)
    assert( i > 0 && i < size(A,2) && j > 0 && j < size(A,2) );
    A(:,[i j]) = A(:,[j i]);
    

  2. 如果你想要一个没有输出参数的类似“操作符”的函数,那么你可能想要这样的东西:

    function swap_cols(Astr,i,j)
    m = evalin('caller', sprintf('size(%s,2);', Astr));
    assert( i > 0 && i < m && j > 0 && j < m );
    evalin('caller', sprintf('%s(:,[%d %d] = %s(:,[%d,%d]);', Astr, j, i, Astr, i, j) );
    

您使用矩阵的名称调用此函数,而不是矩阵本身:

swap_cols('A', i, j);

干杯!

于 2012-12-30T08:20:44.953 回答
2

permute 在 Matlab 中完成工作

A = permute(A,[2 1]);
于 2016-07-02T19:24:09.190 回答