潜空间与奇异值分解

2024-04-23 19:25:38 发布

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

我有一个相当大的数据集,我正在计算奇异值分解,然后我想得到矩阵。我的矩阵形状是:(33388104),它有很多列和行。我想要80%的能量,就是k=51。在

当我在返回中返回矩阵时,我得到以下错误:

operands could not be broadcast together with shapes (33388,51) (51,51)

img is a numpy array of an image file k is the number of singular vectors to use

如何更正函数以修复此错误?在

def rank_k_approx(img, k):
    """Return a rank-k approximation

    img: an image (as a 2D grayscale array)
    k: number of singular vectors used"""
    u, sigma, vt = np.linalg.svd(img)
    energy = np.linalg.norm(sigma)**2
    approx_energy = np.linalg.norm(sigma[:k])**2
    percentage = approx_energy*100/energy
    print ("Energy retained = %4.2f"%percentage)
    return u[:,:k]*np.diag(sigma[:k])*vt[:k,:]

Tags: ofimageannumberimgis错误np