请教一下,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,都忘了
这个厉害了,还有宏