Homework NumPy

使用pip安装NumPy组件,过程如下:

1 以管理员身份打开命令提示符; 2 定位到python.exe所在目录; 3 输入python.exe-m pip install numpy4 等待应用下载并安装,完成后可输入python.exe -m pip list查看安装

安装完成后就可以在代码中import numpy,使用其功能了。

 

0. Generate matrices A, with randomGaussian entries, B, a Toeplitz matrix, where A: Rnm and B: Rmm,for n=200, m=500.

m=500

n=200

A=numpy.random.randn(n,m) #Gaussian distribution matrix

B=numpy.empty((m,m)) #Toeplitz matrix

for k in range(0,m):

   rd1=numpy.random.randint(1,1024)

   rd2=numpy.random.randint(1,1024)

   for i in range(0,k+1):

       B[i][i+m-1-k]=rd1

       B[i+m-1-k][i]=rd2


m=6n=4验证:
1. Calculate A + A, AAT, ATA and AB. Write afunction that computes A(B-λI) for any λ.

 

def Func1(mA,mB,L):

   X=mA.shape

   for i in range(0,X[1]):

       B[i][i]=B[i][i]-L

   mA=mA.dot(B)

   return mA

 

Ans=A+A

print('A+A\n',Ans)

 

Ans=A.dot(A.T)

print('A*AT\n',Ans)

 

Ans=A.T.dot(A)

print('AT*A\n',Ans)

 

Ans=A.dot(B)

print('A*B\n',Ans)

 

Ans=Func1(A,B,100)

print('Function\n',Ans)


 


2. Generate a vector b with m entries andsolve Bx = b.

b=numpy.random.random_integers(1,1000,50)

b=b.astype(numpy.float)

print('b\n',b)

print('x\n',numpy.linalg.solve(B,b))

m=50

3. Compute the Frobenius norm of A: ||A||Fand the infinity norm of B: ||B||. Also find thelargest and smallest singular values of B.

#Frobenius范数,为矩阵元素的平方和再开方

defFrobenius(Mat):

   X=Mat.shape

   R=0.0

   for i in range(0,X[0]):

       for j in range(0,X[1]):

            R=R+Mat[i][j]*Mat[i][j]

   R=R**0.5

   return R

 

print(Frobenius(A))

print()

Ans=numpy.linalg.norm(B, numpy.inf) #行和范数,即矩阵行向量中绝对值之和的最大值

print(Ans,'\n')

SVD = numpy.linalg.svd(B) #奇异值分解

print('largestsingular values: ',SVD[1][0])

print('smallestsingular values: ',SVD[1][-1])


4. Generate a matrix Z, n×n, with Gaussian entries, and use the power iteration to find thelargest eigenvalue and corresponding eigenvector of Z. How many iterations areneeded till convergence?
while True:
    if i!=0:
        v=numpy.random.randint(1,4,n)
    for i in range(0,10001):
        u=Z.dot(v)
        m=numpy.abs(u).max()
        t=u/m
        B=True
        for k in range(0,n):
            if abs(abs(t[k]/v[k])-1)>1.0/1048576: #收敛
                B=False
                break
        if B==True:
            break
        else:
            v=t.copy()
    if i<10000:
        print('iterations: ',i)
        print('largest eigenvalue:\n',m) #最大特征值
        print('corresponding eigenvector:\n',v)
        break

(w,v)=numpy.linalg.eig(Z) #对比
print('comparism:\n',w)

幂乘法求解最大特征值,参考网上资料,为防止数据发散过快导致舍入误差影响,这里用了规范化迭代,使每一次迭代向量的最大分量的绝对值为1。当迭代向量前后相差不足1/1048576时,即视作收敛到目标值。这时,m即为特征根,v即为特征向量。

实际操作中,我发现特征向量经常和标准函数的结果不符,但手算验证发现迭代结果无误,这个问题有待探究。

当迭代次数超过10000而还未收敛时,将视作当前情况无法得出结果,并跳出循环,用随机数生成新的初始向量开始迭代,直至得出答案。

其实有大部分情况将陷入死循环,一直得不出答案。通过查阅资料,我得知这是正常情况。存在特殊情况如:λ1=λ2,λ1=-λ2,λ无实根,λ共轭等,在这种情况下,幂迭代将不适用。而完全随机生成的数据的确容易出现以上特殊情况。

若无以上情况,迭代大多在5000次以内完成,用时不到1秒。

 

5. Generate an n×n matrix, denoted by C, where each entry is 1 with probability p and0 otherwise. Use the linear algebra library of Scipy to compute the singularvalues of C. What can you say about the relationship between n, p and thelargest singular value?

n=100

p=0.74

C=numpy.random.rand(n*n)

for i in range(0,n*n):

   ifC[i]<p:

       C[i]=1

   else:

       C[i]=0

C=C.reshape((n,n))

#生成矩阵

print('n=',n)

print('p=',p)

(u,s,vh)=numpy.linalg.svd(C)

print(s)

经过多次试验,我发现最大奇异值总是近似于n*p,且n越大,p越大,偏差越小。

 

6. Write a function that takes a value zand an array A and finds the element in A that is closest to z. The functionshould return the closest value, not index.

argmin()是求最小值索引的函数,因此即要使所求值所在位置变为最小值。可知,当|A[i]-z|最小时,A[i]即为所求,

import numpy

 

def Closest(A,z):

   T=numpy.array(A)

   T-=z

   T=numpy.abs(T)

   returnT.argmin()

 

A=numpy.random.randn(100)

z=numpy.random.rand()

print(A)

print(z)

print(A[Closest(A,z)]) #最接近的值


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值