(十五)Numpy

本次作业的主角毫无疑问就是numpy了。所以首先要做的就是将numpy加载进来,所以简单起见,也将此模块加载进来,还有之后产生随机数和记录时间的功能,所以还需要添加randomtime:

import numpy as np

import time

import random

 

接下来就是对含有正态矩阵A的构建以及托普利兹矩阵B的构建:

矩阵A利用np.random.normal来构建,第一个参数是平均值,第二个是标准差,第三个则是大小(200500列)

 

得到结果:

 

 

 

托普利兹矩阵则利用自己写的函数实现(scipy模块在本地无法使用lingal,原因未知):

 

得到B矩阵:

 

 

9.1:矩阵相加相减都可以用运算符直接运算,但是乘法需要使用numpy.dot(a,b)

temp=A+A
print("A+A:")
print(temp)

temp=np.dot(A,A.T)
print("A*A.T:")
print(temp)

temp=np.dot(A.T,A)
print("A.T*A")
print(temp)

temp=np.dot(A,B)
print("A*B:")
print(temp)

 

 

9.2:利用函数numpy.linalg.inv得到B的逆,等式两边同时左乘B-1就可以得到XX是一个n个元素的向量(此时n200

b=np.array(range(1000,1500))
print("the x of Bx=b is:")
print(np.dot(np.linalg.inv(B),b))

 

 

 

9.3

print("|A|F:")
print(np.linalg.norm(A,ord='fro'))
print("")
print("||B||:")
print(np.linalg.norm(B,ord=np.inf))

U,sigma,VT=np.linalg.svd(B)

print("the max singular of B is;")
print(np.max(sigma))
print("the min singular of B is;")
print(np.min(sigma))

 

结果如下:

 

9.4:首先设置一个足够小的数字作为判别是否收敛的条件(这里取了0.5*10^-4),接着利用求特征值的算法(参考文献:https://en.wikipedia.org/wiki/Power_iteration

)即可得到最大特征根

Z=np.random.normal(100,100,n*n).reshape((n,n))
print("Z:")
print(Z)
y1=np.ones(n)
y2=np.zeros(n)
x=y1
t1=time.clock()
while abs(np.max(y1-y2))>1/2*(0.0001):
    y1=y2
    y2=np.dot(Z,x)
    x=y2/np.linalg.norm(y2)
t2=time.clock()
print("time cost:"+str(t2-t1))
print("x=")
print(x)
print("max eigenvalue:")
print(max(x))

 

结果如下:

 

 

9.5:利用9.3的求奇异值的方法得到奇异值。


p=float(input("The p :"))
temp=[1 if random.random()<p else 0 for i in range(0,n*n)]
C=np.array(temp).reshape(n,n)
print("C:")
print(C)
U,sigma,VT=np.linalg.svd(C)
e=np.max(sigma)
print("the eigenvalue is:")
print(e)

 

其中一次的结果:

 

经过反复测试,得到最大奇异值约等于n*p这一结论。

9.6:利用数组可以直接运用运算符-”去减一个常数的特点,配合argmin可以很简洁的完成!

def argMin(A,z):
    return A[0][np.argmin(np.abs(A - z))]

K=np.random.randn(1,1000)
z=input("input the num:")
z=float(z)
a=argMin(K,z)
print(a)

其中一次输入测试:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值