最大奇异值 NumPy `ndarray`
largest singular value NumPy `ndarray`
我有一个大的二维 ndarray
,A
,我想计算 SVD 以检索最大特征值和关联的特征向量对。查看 NumPy 文档,NumPy 似乎只能计算完整的 SVD(numpy.linalg.svd
),而 SciPy 具有完全满足我需要的方法(scipy.sparse.linalg.svds
),但具有稀疏矩阵和我不想执行 A
的转换,因为它需要额外的计算时间。
到目前为止,我一直在 A
上直接使用 SciPy svds
,但是文档不鼓励将 ndarray
传递给这些方法。
有没有办法使用接受 ndarray
个对象的方法来执行此任务?
如果 svds
与您的密集 A
数组一起使用,则继续使用它。您无需将其转换为任何内容。 svds
进行所有需要的调整。
它的文档说
A : {sparse matrix, LinearOperator}
Array to compute the SVD on, of shape (M, N)
但是 LinearOperator
是什么?它是一个可以执行矩阵乘积的东西的包装器。对于密集数组 A.dot
合格。
查看 svds
的代码。如果 A
还不是线性运算符或稀疏矩阵,则要做的第一件事是 A = np.asarray(A)
。然后它获取 A.dot
和 (hemetianA).dot
并创建一个新的 LinearOperator.
这个函数中的稀疏矩阵没有什么特别之处。重要的是有一个兼容的矩阵产品。
看看这些时间:
In [358]: A=np.eye(10)
In [359]: Alg=splg.aslinearoperator(A)
In [360]: Am=sparse.csr_matrix(A)
In [361]: timeit splg.svds(A)
1000 loops, best of 3: 541 µs per loop
In [362]: timeit splg.svds(Alg)
1000 loops, best of 3: 964 µs per loop
In [363]: timeit splg.svds(Am)
1000 loops, best of 3: 939 µs per loop
直接使用A
最快。转换没有帮助,即使它们在计时循环之外。
我有一个大的二维 ndarray
,A
,我想计算 SVD 以检索最大特征值和关联的特征向量对。查看 NumPy 文档,NumPy 似乎只能计算完整的 SVD(numpy.linalg.svd
),而 SciPy 具有完全满足我需要的方法(scipy.sparse.linalg.svds
),但具有稀疏矩阵和我不想执行 A
的转换,因为它需要额外的计算时间。
到目前为止,我一直在 A
上直接使用 SciPy svds
,但是文档不鼓励将 ndarray
传递给这些方法。
有没有办法使用接受 ndarray
个对象的方法来执行此任务?
如果 svds
与您的密集 A
数组一起使用,则继续使用它。您无需将其转换为任何内容。 svds
进行所有需要的调整。
它的文档说
A : {sparse matrix, LinearOperator} Array to compute the SVD on, of shape (M, N)
但是 LinearOperator
是什么?它是一个可以执行矩阵乘积的东西的包装器。对于密集数组 A.dot
合格。
查看 svds
的代码。如果 A
还不是线性运算符或稀疏矩阵,则要做的第一件事是 A = np.asarray(A)
。然后它获取 A.dot
和 (hemetianA).dot
并创建一个新的 LinearOperator.
这个函数中的稀疏矩阵没有什么特别之处。重要的是有一个兼容的矩阵产品。
看看这些时间:
In [358]: A=np.eye(10)
In [359]: Alg=splg.aslinearoperator(A)
In [360]: Am=sparse.csr_matrix(A)
In [361]: timeit splg.svds(A)
1000 loops, best of 3: 541 µs per loop
In [362]: timeit splg.svds(Alg)
1000 loops, best of 3: 964 µs per loop
In [363]: timeit splg.svds(Am)
1000 loops, best of 3: 939 µs per loop
直接使用A
最快。转换没有帮助,即使它们在计时循环之外。