Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从numpy/scipy svd获取未排序的奇异值列表_Python_Numpy_Scipy_Svd - Fatal编程技术网

Python:从numpy/scipy svd获取未排序的奇异值列表

Python:从numpy/scipy svd获取未排序的奇异值列表,python,numpy,scipy,svd,Python,Numpy,Scipy,Svd,我有一个方形矩阵,希望使用svd通过消除一些行/列来减少矩阵的条件数 我使用numpy/scipy都给出了单数值的排序列表 使用排序列表,通过丢弃一些小的奇异值,我可以轻松地重建较小的矩阵。但很难映射到原始矩阵,即哪些值被消除,哪些值被保留。我需要更进一步 有没有办法在以后确定原始矩阵、保留了哪些索引以及丢弃了哪些索引。要对矩阵执行奇异值分解,您可以查看numpy中的模块 矩阵的奇异值分解将其分解为三个矩阵的乘积: M=U S V* M是您的原始矩阵S是一个矩形对角矩阵,对角线上有('sorte

我有一个方形矩阵,希望使用svd通过消除一些行/列来减少矩阵的条件数

我使用numpy/scipy都给出了单数值的排序列表

使用排序列表,通过丢弃一些小的奇异值,我可以轻松地重建较小的矩阵。但很难映射到原始矩阵,即哪些值被消除,哪些值被保留。我需要更进一步


有没有办法在以后确定原始矩阵、保留了哪些索引以及丢弃了哪些索引。

要对矩阵执行奇异值分解,您可以查看numpy中的模块

矩阵的奇异值分解将其分解为三个矩阵的乘积:

M=U S V*

M是您的原始矩阵S是一个矩形对角矩阵,对角线上有('sorted')奇异值UV分别称为左奇异向量和右奇异向量

注意:np.linalg.svd不返回S,而是返回S,它只是一个包含奇异值的一维数组

实际实施

假设有一个由2D数组
x
表示的(mxq)特征空间,其中
x
是一个居中矩阵。您可以计算其SVD:

U, s, Vt = np.linalg.svd(X)
其中,
t
表示V的转置,s表示“未排序的奇异值列表”

然后,通过使用奇异向量并丢弃保持最小方差的奇异向量,可以将原始特征空间投影到
n
维度:

X_projected = X.dot(Vt.T[:,:n])
其中,
X_projected
现在是低n维空间中特征空间的表示

重要的是,您可以将缩小的要素空间转换回原始空间:

X_recovered = X_projected.dot(Vt[:,:n])

值得注意的是,这可以通过将
X_recovered
与原始功能集(
X
)进行比较来测量缩减功能集中丢失的信息,以测量重建错误等情况

您需要添加一些说明。奇异向量是原始特征的线性组合。奇异值量化此新功能中保留的方差量。@FChm条件数是最大/最小奇异值的比率。因此,去除一些小的奇异值可以帮助管理矩阵的条件数。