python 奇异值分解小程序

import numpy as np
import random

def gen_inv(a):
        a_sq = np.dot(a.T, a)
        eigen = np.linalg.eig(a_sq)
        eigen_vals = eigen[0]
        eigen_vectors = eigen[1]

        orth = a.dot(eigen_vectors)
        new_orth_len = np.zeros([orth.shape[1], orth.shape[1]])
        orth_sq = orth.T.dot(orth)

        for j in range(orth.shape[1]):
                for i in range(orth.shape[0]):
                        orth[i][j] /= (orth_sq[j][j] ** 0.5)
                new_orth_len[j][j] = orth_sq[j][j] ** 0.5

        return {"Q": orth, "lamda": new_orth_len, "P": eigen_vectors}

M = np.zeros([500, 500])
for i in range(M.shape[0]):
        for j in range(M.shape[1]):
                M[i][j] = random.random()

print gen_inv(M)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值