Я хотел бы выполнить SVD (разложение по сингулярным значениям) через cupy.linalg.svd
по стеку матриц, вычисляя SVD для каждой матрицы.
import cupy as cp
arr = cp.random.uniform(size=(1000, 3, 3), dtype=cp.float32)
sing_vals = cp.linalg.svd(arr, compute_uv=False, full_matrices=False)
Это дает ошибку, утверждая, что arr
не 2DПо-видимому, cp.linalg.svd
может вычислять SVD только для одной двумерной матрицы.Однако numpy.linalg.svd
всегда вычисляет SVD по двум последним осям массива, что намного мощнее.
Есть ли способ эффективно вычислить SVD по стеку матриц вcupy
?
Еще лучше, есть ли общий метод для эффективного apply_along_axis
?