Untuk reduksi model, saya ingin menghitung vektor singular kiri terkait dengan - katakanlah 20 - nilai singular terbesar dari matriks , di mana N ≈ 10 6 dan k ≈ 10 3 . Sayangnya, matriks A saya akan padat tanpa struktur apa pun.
Jika saya hanya memanggil svd
rutin dari numpy.linalg
modul dengan Python untuk matriks acak ukuran ini, saya mengalami kesalahan memori. Hal ini disebabkan alokasi untuk dekomposisi A = V S U .
Apakah ada algoritma di sekitar, yang menghindari jebakan ini? Misalnya dengan mengatur hanya vektor singular yang dikaitkan dengan nilai singular bukan nol.
Saya siap berdagang dalam waktu dan ketepatan perhitungan.
full_matrices
yang disetel ke False sehingga hanya bagian 'bukan nol' yang dihitung. Namun demikian, adakah cara untuk mengurangi perhitungan lebih jauh?
numpy
backend menggunakan kode fortran, yang LAPACKE_dgesvd
rutin untuk svd standar. Namun, biasanya matriks Anda adalah C_CONTIGOUS
(periksa dengan matrix.flags
). Oleh karena itu menyalin data untuk perataan fortran. Selain itu saat menjalankan rutin lapack dgesvd salinan lain dari matriks Anda diperlukan (atau setidaknya memori untuk itu). Anda dapat menyingkirkan satu salinan jika Anda memastikan bahwa penyelarasan memori adalah gaya fortran sejak awal.