[python作业] 第十一周 [numpy exercise]

题目要求

import numpy as np
from scipy.linalg import toeplitz

n = 200
m = 500

A = np.random.normal(loc=0, scale=1, size=(n,m))
B = toeplitz(np.random.random(m), np.random.random(m))

print('Matrix A:\n', A, end='\n\n')
print('Matrix B:\n', B, end='\n\n')

Exercise 9.1

print('------------------------------------------------')
print('Exercise 9.1\n')

print('A+A:\n', A+A, end='\n\n')
print('AAT:\n', np.dot(A, A.T), end='\n\n')
print('ATA:\n', np.dot(A.T, A), end='\n\n')
print('AB:\n', np.dot(A, B), end='\n\n')

def f1(A, B, Lambda):
    return np.dot(A, B-Lambda*np.eye(m))
print('B(A-Lambda*I):\n', f1(A, B, 2), end='\n\n')

Exercise 9.2

print('------------------------------------------------')
print('Exercise 9.2\n')

b = np.random.random(m)
ans2 = np.linalg.solve(B, b)
print('With a ramdom vector b, the answer of Bx = b is:')
print(ans2, end='\n\n')

Exercise 9.3

print('------------------------------------------------')
print('Exercise 9.3\n')
a = np.linalg.norm(A, 'fro')
b = np.linalg.norm(B, np.inf)
s = np.linalg.svd(B)[1]
Max = np.max(s)
Min = np.min(s)

print('The Frobenius norm of A:\n', a)
print('The infinity norm of B:\n', b)
print('Largest singular value of B:\n', Max)
print('Smallest singular value of B:\n', Min, end='\n\n')

Exercise 9.4

print('------------------------------------------------')
print('Exercise 9.4\n')
# Reference: https://en.wikipedia.org/wiki/Power_iteration
import time

def power_iteration(A):
    iter_count = 0

    b_k = np.random.rand(A.shape[1])

    while(True):
        # calculate the matrix-by-vector product Ab
        b_k1 = np.dot(A, b_k)

        # calculate the norm
        b_k1_norm = 0
        b_k1_norm_temp = b_k1_norm
        b_k1_norm = np.linalg.norm(b_k1)

        # re normalize the vector
        b_k = b_k1 / b_k1_norm

        iter_count += 1

        if abs(b_k1_norm_temp - b_k1_norm) < 0.0001:
            break

    return iter_count, b_k1_norm, b_k

n6 = 4
Z = np.random.random(size=(n6, n6))
begin = time.clock()
count, value, vector = power_iteration(Z)
end = time.clock()

print('Z:\n', Z)
print('\nThe largest eigenvalue: ', value)
print('The corresponding eigenvector: ', vector)
print('Iteration count: ', count)
print('Time: ', end-begin)

Exercise 9.5

print('------------------------------------------------')
print('Exercise 9.5\n')

from scipy.linalg import svdvals

n, p = 5, 0.5
c = np.zeros((n, n))

for i in range(n):
    for j in range(n):
        x = np.random.rand()
        c[i][j] = 1 if x < p else 0

print('C:\n', c)
print('\nSingular values of C:\n', svdvals(c))

Exercise 9.6

print('------------------------------------------------')
print('Exercise 9.6\n')

z = np.random.random()
print('z=', z)

idx = np.argmin(np.abs(A-z))
print(A[idx//A.shape[0]][idx%A.shape[1]])

猜你喜欢

转载自blog.csdn.net/ill__world/article/details/80449627