2012-12-30 104 views
2

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

+3

有什么不对A(:[I,J])= A(:[J,I])?它快速而优雅。 –

+0

这是唯一的方法? –

+2

为什么你需要一个'builtin'函数?那么'A(:,[i,j])= A(:,[j,i])'是否不足以满足您的需求? – slayton

回答

2

两种可能性:

  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);

干杯!

+1

+1。我喜欢创新的字符串接受函数,尽管这真是一个过度杀伤力。 –

+0

@EitanT过度使用'inputname'而不是'Astr' ;-) – Shai

2

置换做这项工作在Matlab

A = permute(A,[2 1]);