请教一下,julia中应该用哪个函数把矩阵的两列或者多列进行相互置换

请教一下,julia中应该用哪个函数把矩阵的两列或者多列进行相互置换。查文档查了好久没有看到需要的函数

这,不是直接用索引么? 比如 A[:, [1,3,2,4]]

2 个赞
ulia> a = rand(3, 3)
3×3 Matrix{Float64}:
 0.0101746  0.691775  0.32066
 0.549458   0.241164  0.805536
 0.152368   0.796367  0.947277

julia> a[:, [1,3]] .= @view(a[:, [3, 1]]);

julia> a
3×3 Matrix{Float64}:
 0.32066   0.691775  0.0101746
 0.805536  0.241164  0.549458
 0.947277  0.796367  0.152368
3 个赞

如果你想要交换矩阵两列最高效的办法,可以看看这个:

using BenchmarkTools

"Return matrix X with swapped columns i and j."
function swapcols!(X, i, j)
   m, n = size(X)
   if (1 ≤ i ≤ n) && (1 ≤ j ≤ n)
      @inbounds @simd for k = 1:n
         X[k,i],X[k,j] = X[k,j],X[k,i]
      end
      return X
   else
      throw(BoundsError())
   end
end


function swapcol_1(X, i, j)

   X[:, [i, j]] .= @view(X[:, [j, i]])
end



X = rand(10,10)

@btime swapcols!($X, 1, 3);

@btime swapcol_1($X, 1, 3);

在我的机器上分别对应

  7.175 ns (0 allocations: 0 bytes)
  214.742 ns (4 allocations: 528 bytes)
3 个赞

这,不是直接用索引么? 比如 A[:, [1,3,2,4]]

+1 很多时候,并不需要真的交换值,只需要交换下标就行了。

1 个赞

谢谢,get了,好久没用matlab,都忘了

这个厉害了,还有宏