我目前正在嘗試顛倒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)我想知道我們在茱莉亞是否有這樣的語言限制。 –