最大单数值NumPy`ndarray`

2024-04-26 01:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的二维ndarrayA,我想计算SVD检索最大特征值和相关的特征向量对。看看NumPy文档,NumPy似乎只能计算完整的SVD(numpy.linalg.svd),而SciPy的方法正好满足我的需要(scipy.sparse.linalg.svds),但是对于稀疏矩阵,我不想执行A的转换,因为这需要额外的计算时间。在

到目前为止,我一直直接在A上使用SciPysvds,但是文档不鼓励将ndarray传递给这些方法。在

有没有一种方法可以用接受ndarray对象的方法来执行这个任务?在


Tags: 方法文档numpy矩阵scipysparsesvdndarray
1条回答
网友
1楼 · 发布于 2024-04-26 01:28:01

如果svds与密集的A数组一起工作,那么继续使用它。你不需要把它转换成任何东西。svds完成所有需要的调整。在

文件上说

A : {sparse matrix, LinearOperator} Array to compute the SVD on, of shape (M, N)

但是什么是LinearOperator?它是一个包装器,可以执行矩阵积。对于密集数组,A.dot符合条件。在

查看svds的代码。第一件事是A = np.asarray(A)如果A不是线性算子或稀疏矩阵。然后它获取A.dot和{},并生成一个新的线性属性器。在

这个函数中的稀疏矩阵没有什么特别之处。重要的是有一个兼容的矩阵乘积。在

看看这些时间:

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最快。转换没有帮助,即使它们在定时循环之外。在

相关问题 更多 >