首页 > 解决方案 > 有没有办法在 Julia 中交换 O(1) 中的列?

问题描述

我拿起 Julia 来做一些数值分析的工作,并试图实现一个完整的枢轴 LU 分解(例如,试图获得一个尽可能稳定的 LU 分解)。我认为这样做的最佳方法是找到每列的最大值,然后按最大值的降序排列这些列。

有没有办法避免交换两列的每个元素,而是做一些改变两个引用/指针之类的事情?

标签: julialinear-algebranumerical-methods

解决方案


跟进@longemen3000 的回答,您可以使用视图来交换列。例如:

julia> A = reshape(1:12, 3, 4)
3×4 reshape(::UnitRange{Int64}, 3, 4) with eltype Int64:
 1  4  7  10
 2  5  8  11
 3  6  9  12

julia> V = view(A, :, [3,2,4,1])
3×4 view(reshape(::UnitRange{Int64}, 3, 4), :, [3, 2, 4, 1]) with eltype Int64:
 7  4  10  1
 8  5  11  2
 9  6  12  3

也就是说,这是否是一个好的策略取决于访问模式。如果您将使用V一次或几次元素,则此view策略是一个不错的策略。相反,如果您V多次访问元素,则最好在原地复制或移动值,因为这是您支付一次的价格,而在这里您每次访问值时都需要支付间接成本。


推荐阅读