Modelin indirgenmesi için, matrisi olan bir matrisin en büyük tekil değerlerini - say 20 ile ilişkili olan sol tekil vektörleri hesaplamak istiyorum , burada ve . Ne yazık ki, matrisim herhangi bir yapı olmadan yoğun olacak. N ≈ 10 6 k ≈ 10 3 A
Ben sadece bu boyutta rastgele bir matris için Python modülünden svd
rutin çağırırsanız, numpy.linalg
bir bellek hatası ile karşılaşıyorum. Bunun nedeni ayrışımı için tahsis edilmesidir . A = V S U
Etrafta bu tuzaklardan kaçınan algoritmalar var mı? Örneğin, yalnızca sıfır olmayan tekil değerler ile ayrılmış tekil vektörler oluşturarak.
Hesaplama zamanı ve doğruluğu ile ticaret yapmaya hazırım.
full_matrices
yalnızca 'sıfır olmayan' parçaların hesaplanması için False olarak ayarlanmış seçeneğe sahiptir . Yine de, hesaplamayı daha da azaltmanın bir yolu var mı?
numpy
uç, LAPACKE_dgesvd
standart svd için rutin olan fortran kodunu kullanır . Ancak, genellikle matrisiniz C_CONTIGOUS
(ile kontrol edin matrix.flags
). Bu nedenle verileri fortran hizalaması için kopyalar. Ayrıca, lapack rutin dgesvd'yi çalıştırırken matrisinizin başka bir kopyası (veya en azından bunun için bellek) gereklidir. Bellek hizalamasının en başından itibaren fortran tarzı olduğundan emin olursanız, bir kopyadan kurtulabilirsiniz.