Fra*_*rio 4 linear-algebra numerical-methods julia
我选择 Julia 来做一些数值分析工作,并尝试实现完整的主元 LU 分解(例如,尝试获得尽可能稳定的 LU 分解)。我认为最好的方法是找到每列的最大值,然后按最大值的降序排列这些列。
有没有办法避免交换两列的每个元素,而是执行诸如更改两个引用/指针之类的操作?
只是为了“完整性”,如果您确实想就地交换列,
function swapcols!(X::AbstractMatrix, i::Integer, j::Integer)
@inbounds for k = 1:size(X,1)
X[k,i], X[k,j] = X[k,j], X[k,i]
end
end
Run Code Online (Sandbox Code Playgroud)
简单快捷。
事实上,在小矩阵的单独基准测试中,这甚至比view其他答案中提到的方法更快(视图并不总是免费的):
julia> A = rand(1:10,4,4);
julia> @btime view($A, :, $([3,2,1,4]));
31.919 ns (3 allocations: 112 bytes)
julia> @btime swapcols!($A, 1,3);
8.107 ns (0 allocations: 0 bytes)
Run Code Online (Sandbox Code Playgroud)