julia - 有没有办法在 Julia 中交换 O(1) 中的列?
问题描述
我拿起 Julia 来做一些数值分析的工作,并试图实现一个完整的枢轴 LU 分解(例如,试图获得一个尽可能稳定的 LU 分解)。我认为这样做的最佳方法是找到每列的最大值,然后按最大值的降序排列这些列。
有没有办法避免交换两列的每个元素,而是做一些改变两个引用/指针之类的事情?
解决方案
跟进@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
多次访问元素,则最好在原地复制或移动值,因为这是您支付一次的价格,而在这里您每次访问值时都需要支付间接成本。
推荐阅读
- asp.net - 当文件为“大”时,ASP.NET Framework Web 应用程序将合同设置为 null
- python - 图像不匹配 pil,django 模型
- javascript - 如何在真实设备上运行独立的 Expo React Native 项目并且仍然能够看到控制台日志?
- ios - 没有暗淡效果的翻转 UIView
- excel - For 循环需要 30 多分钟才能运行
- sparql - 将 Wikidata 项目分类为“地点”
- r - 在 R 中使用 simsem 包生成数据
- javascript - 为什么将值推入嵌套在对象中的数组之后。它显示了数组中的项目数,但值未定义?
- python - Pandas 在除一列之外的所有列上嵌套循环
- c++ - C++ 检查类是否派生自模板基类;具有完整的模板参数