我目前正在尝试颠倒100万的大型矩阵100万,我认为反斜杠操作符会对此有所帮助。任何想法如何实施?我没有找到任何具体的例子,所以任何帮助都非常感谢。如何在Julia中使用反斜杠运算符?
4
A
回答
8
有关它如何实现的任何想法?
这是一个多算法。这展示了如何使用它:
julia> A = rand(10,10)
10×10 Array{Float64,2}:
0.330453 0.294142 0.682869 0.991427 … 0.533443 0.876566 0.157157
0.666233 0.47974 0.172657 0.427015 0.501511 0.0978822 0.634164
0.829653 0.38.589555 0.480963 0.606704 0.642441 0.159564
0.709197 0.570496 0.484826 0.17325 0.699379 0.0281233 0.66744
0.478663 0.87298 0.488389 0.188844 0.38193 0.641309 0.448757
0.471705 0.804767 0.420039 0.0528729 … 0.658368 0.911007 0.705696
0.679734 0.542958 0.22658 0.977581 0.197043 0.717683 0.21933
0.771544 0.326557 0.863982 0.641557 0.969889 0.382148 0.508773
0.932684 0.531116 0.838293 0.031451 0.242338 0.663352 0.784813
0.283031 0.754613 0.938358 0.0408097 0.609105 0.325545 0.671151
julia> b = rand(10)
10-element Array{Float64,1}:
0.0795157
0.219318
0.965155
0.896807
0.701626
0.741823
0.954437
0.573683
0.493615
0.0821557
julia> A\b
10-element Array{Float64,1}:
1.47909
2.39816
-0.15789
0.144003
-1.10083
-0.273698
-0.775122
0.590762
-0.0266894
-2.36216
您可以使用@which
,看看它是如何定义的:
julia> @which A\b
\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
这这里带领我们:https://github.com/JuliaLang/julia/blob/master/base/linalg/generic.jl#L827(行号,因为版本不同略有变化)。正如你所看到的,它会进行一些快速的函数调用来确定它是什么类型的矩阵。 istril
发现它的下三角形:https://github.com/JuliaLang/julia/blob/master/base/linalg/generic.jl#L987等。一旦确定了矩阵类型,它会尽可能地专门化矩阵,因此它可以高效,然后调用\
。这些专用的矩阵类型或者执行因式分解,然后\
进行反向替换(这是在自己的BTW上使用\
重新使用因式分解的好方法),或者它“直接知道”答案,就像三角矩阵或对角矩阵一样。
无法得到比源更具体的东西。
请注意,\
与仅反转稍有不同。你通常不想颠倒矩阵,更不用说大矩阵。这些分解更稳定。然而,inv
将做倒置,这很像LU分解(在Julia中是lufact
)。在矩阵奇异或接近奇异的某些情况下,您可能还想查看pinv
的psudo-inverse,但您应该真正避免这种情况,而不是分解因子分解+而不是使用逆。
对于非常大的稀疏矩阵,您需要使用迭代求解器。你会在IterativeSolvers.jl
相关问题
- 1. 如何在NSURL中使用反斜杠
- 2. 反斜杠运算符在RSH条件下做了什么?
- 3. 如何用双反斜杠替换反斜杠?
- 4. 如何用单个反斜杠替换双反斜杠
- 5. 如何用Emacs Lisp中的字符串中的反斜杠替换正斜杠?
- 6. 蟒蛇代替反斜杠反斜杠
- 7. 使preg_split反斜杠
- 8. PHP如正斜杠反斜杠?
- 9. 如何在PHP中比较字符串并忽略斜杠和反斜杠
- 10. Ruby中的斜杠和反斜杠
- 11. 在vim缩写中使用反斜杠
- 12. 在ConverterParameter中使用反斜杠
- 13. Angular2使用Elvis运算符在正斜杠对象键上
- 14. 如何在反斜杠上使用Python字符串split()?
- 15. 如何防止Perl将双反斜杠解释为单反斜杠字符?
- 16. 在字符串中跳出反斜杠
- 17. 在字符串中跳出反斜杠?
- 18. 在vim中搜索反斜杠字符
- 19. 如何在JSON中反斜杠?
- 20. 如何在R中避免反斜杠?
- 21. Jquery-反斜杠字符
- 22. 用JavaScript中的双反斜杠替换单个反斜杠
- 23. 用Emacs中的单个反斜杠替换双反斜杠
- 24. 如何插入反斜杠?
- 25. 用字符串中的单个反斜杠替换双反斜杠
- 26. 使用.htaccess以正斜杠替换URL中的反斜杠
- 27. 反斜杠在JavaScript
- 28. 如何测试\符号(反斜杠)是否在字符串中?
- 29. 反斜杠
- 30. 如何使用rpartition将字符串拆分为反斜杠
中发现很多实现。一个10^6 x 10^6密集的Float64矩阵需要7.3TB的RAM。由于反转稀疏矩阵会生成一个稠密矩阵,因此实际上并不想要反转矩阵。这是一个很好的经验法则:不要反转,解决。 – StefanKarpinski
感谢您的帮助。我现在正在使用反斜杠运算符。我也在尝试inv()调用它,但它给了我stackoverflow错误。我搜索了一个机制来限制julia使用的系统RAM(我的系统有1TB的RAM)我想知道我们在茱莉亚是否有这样的语言限制。 –