Introduction to Python Exercises 9.Numpy

【前置条件】


按照题意,不妨将矩阵A初始化为元素服从标准高斯分布(标准正态分布)的n*m矩阵,将矩阵B初始化为首行为[0, 1, 2, ..., 499]的m*m托普利兹矩阵。

import numpy as np
from scipy.linalg import toeplitz 

n = 200
m = 500

A = np.random.randn(n, m)   # 元素服从标准高斯分布
B = toeplitz(list(range(0, 500)))   # m*m托普利兹矩阵


【问题解决】


python的常用矩阵运算可参考https://blog.csdn.net/ml_algorithmresearch/article/details/50602419

print(A + A)    
print(np.dot(A, A.T))   
print(np.dot(A.T, A))
print(np.dot(A, B))

def fun(lamb):
    C = B - lamb * np.ones((m, m))
    return (np.dot(A, C))
print(fun(2))   # 当lamb = 2时



b = np.random.rand(m, 1)    # 随机生成m*1矩阵
x = np.linalg.solve(B, b)   # 求解Bx = b
print(x)



范数运算相关知识可参考以下两篇博文:

(1)numpy的求模模块linalg在范数运算中的应用

(2)numpy.linalg.svd函数

print(np.linalg.norm(A, 'fro'))     # A的弗罗贝尼乌斯范数
print(np.linalg.norm(B, np.inf))    # B的无穷范数

# 奇异值(USV)分解
U,sigma,VT = np.linalg.svd(B) 
smax = max(sigma)
smin = min(sigma)



幂法求解矩阵特征值和特征向量的原理可参考https://blog.csdn.net/luckisok/article/details/1602266

# 求Z(n*n矩阵)的特征值与特征向量
def power_iteration(n):
    '''
    lamb:特征值
    u:特征向量
    ite_num:迭代次数
    end-begin:运算时间
    '''
    Z = np.random.randn(n,n)
    u = np.ones(n)
    lamb = 0
    ite_num = 0
    begin = time.clock()
    while True:
        v = np.dot(Z, u)
        lamb_old = lamb
        lamb = np.linalg.norm(v, np.inf)
        u = v / lamb
        ite_num += 1
        if abs(lamb - lamb_old) < 0.0001:
            break
    end = time.clock()
    return lamb, u, ite_num, end - begin
    
print(power_iteration(100))



def fun(n, p):
    C = np.random.binomial(1, p, (n,n)) # 元素服从二项分布
    U, sigma, VT = np.linalg.svd(C)
    smax = max(sigma)
    return sigma, smax

print(fun(100, 0.5))


提示中numpy模块的argmax 函数是用来求一个array中最大值的下标。

# 求数组A中最接近z的元素
def fun(z, A):
    B = abs(A - z)
    index = np.argmin(B)
    return A[index]

A = np.array([1, 2, 3, 4])
z = 2.8
print(fun(z, A))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值