我目前正在嘗試顛倒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. Excel 2010 VBA反斜槓(\)運算符
- 2. 使用通配符和反斜槓的MySQL LIKE運算符
- 3. 如何用斜槓'/'替換反斜槓'\'?
- 4. 如何在NSURL中使用反斜槓
- 5. 如何實現Matlab的mldivide(又名反斜槓運算符「\」)
- 6. 在php中使用雙反斜槓代替單反斜槓
- 7. 如何用JavaScript中的雙反斜槓替換反斜槓字符?
- 8. C賦值中的奇怪反斜槓運算符
- 9. 反斜槓運算符在RSH條件下做了什麼?
- 10. 如何使用javascript替換正斜槓爲反斜槓和正斜槓
- 11. 如何用雙反斜槓替換反斜槓?
- 12. 如何用單個反斜槓替換雙反斜槓
- 13. 反斜槓在字符串返回兩個反斜槓
- 14. 如何使用java將反斜槓替換爲正斜槓?
- 15. 如何使用java將正斜槓更改爲反斜槓?
- 16. 用反斜槓
- 17. 用反斜槓
- 18. 如何從字符串中將反斜槓替換爲單個反斜槓?
- 19. 反斜槓和正斜槓在Python中混合使用
- 20. 如何用Emacs Lisp中的字符串中的反斜槓替換正斜槓?
- 21. 蟒蛇代替反斜槓反斜槓
- 22. 使preg_split反斜槓
- 23. PHP如正斜槓反斜槓?
- 24. 如何在PHP中比較字符串並忽略斜槓和反斜槓
- 25. sed用反斜槓替換正斜槓
- 26. 用Java發送斜槓和反斜槓
- 27. Ruby中的斜槓和反斜槓
- 28. 在ConverterParameter中使用反斜槓
- 29. 在vim縮寫中使用反斜槓
- 30. 如何在反斜槓上使用Python字符串split()?
中發現很多實現。一個10^6 x 10^6密集的Float64矩陣需要7.3TB的RAM。由於反轉稀疏矩陣會生成一個稠密矩陣,因此實際上並不想要反轉矩陣。這是一個很好的經驗法則:不要反轉,解決。 – StefanKarpinski
感謝您的幫助。我現在正在使用反斜槓運算符。我也在嘗試inv()調用它,但它給了我stackoverflow錯誤。我搜索了一個機制來限制julia使用的系統RAM(我的系統有1TB的RAM)我想知道我們在茱莉亞是否有這樣的語言限制。 –