第11周作业 #高级编程技术

numpy


Generate matrices A, with random Gaussian entries, B, a Toeplitz matrix, where A ∈Rn×m and B ∈Rm×m, for n = 200, m = 500.

import numpy as np
from scipy.linalg import toeplitz
A = np.random.normal(2, 1, [200, 500])
B = toeplitz(np.random.normal(2, 1, 500), np.random.normal(2, 1, 500))

Exercise 9.1

Matrix operations Calculate A + A, AAT, ATA and AB. Write a function that computes A(B−λI) for any λ.

print("A:", A)
print("B:", B)
print("A + A:", A + A)
print("AAT:", np.dot(A, A.T))
print("ATA:", np.dot(A.T, A))
print("AB:", np.dot(A, B))

def foo(λ):
    return np.dot(A, B - λ)

运行结果:(数据量用了2×5和5×5)

A: [[1.65428653 1.29250801 0.12205231 0.74224551 2.11893814]
 [1.31702596 1.57987211 1.76251052 1.09167503 0.72512259]]
B: [[1.75756406 2.38712337 0.4477556  3.09135636 1.92525955]
 [2.42381625 1.75756406 2.38712337 0.4477556  3.09135636]
 [2.31593935 2.42381625 1.75756406 2.38712337 0.4477556 ]
 [2.61638874 2.31593935 2.42381625 1.75756406 2.38712337]
 [2.29753941 2.61638874 2.31593935 2.42381625 1.75756406]]
A + A: [[3.30857306 2.58501602 0.24410461 1.48449102 4.23787628]
 [2.63405192 3.15974422 3.52502104 2.18335006 1.45024519]]
AAT: [[9.46296488 6.78263494]
 [6.78263494 9.05455374]]
ATA: [[4.47122129 4.21891117 2.52318159 2.6656511  4.4603361 ]
 [4.21891117 4.16657284 2.94229479 2.6840652  3.88434548]
 [2.52318159 2.94229479 3.12134009 2.0146815  1.53665748]
 [2.6656511  2.6840652  2.0146815  1.74268277 2.36437055]
 [4.4603361  3.88434548 1.53665748 2.36437055 5.01570162]]
AB: [[13.13332887 13.77944548 10.74700582 12.42453151 12.73118452]
 [14.74818863 14.61808725 11.78414015 12.66237593 12.08915085]]



Exercise 9.2

Solving a linear system Generate a vector b with m entries and solve Bx = b.

print("B:")
print(B)

b = np.random.random(5)
print("b:", b)
x = np.linalg.solve(B, b)
print("x:", x)
print("np.dot(B, x):\n", np.dot(B, x))

运行结果:(数据量用了5×5)

B:
[[ 2.5121108   1.84558016  1.69360915  1.14977797  3.51985693]
 [ 2.89274206  2.5121108   1.84558016  1.69360915  1.14977797]
 [ 3.59327592  2.89274206  2.5121108   1.84558016  1.69360915]
 [ 0.87142587  3.59327592  2.89274206  2.5121108   1.84558016]
 [-0.09840123  0.87142587  3.59327592  2.89274206  2.5121108 ]]
b: [0.63848187 0.88284346 0.00751235 0.26442866 0.93755242]
x: [ 0.23215661 -0.41407927 -2.29703059  2.99870062  0.35851666]
np.dot(B, x):
 [0.63848187 0.88284346 0.00751235 0.26442866 0.93755242]



Exercise 9.3

Norms Compute the Frobenius norm of A: ||A||F and the infinity norm of B: ||B||∞. Also find the largest and smallest singular values of B.

print("A:")
print(A)
print("B:")
print(B)

print("the Frobenius norm of A:", np.linalg.norm(A))
print("the infinity norm of B:", np.linalg.norm(B, np.inf))
print("the largest singular value of B:", np.linalg.norm(B, 2))
print("the smallest singular value of B:", np.linalg.norm(B, -2))

运行结果:(数据量用了2×5和5×5)

A:
[[ 0.89763757  3.90870489  2.24489208  1.06493451 -0.38395911]
 [ 1.9064736  -0.60809743  2.44124628  3.29251693  2.95935474]]
B:
[[3.26704861 1.56438763 1.90880029 3.5782664  2.64795173]
 [2.55789806 3.26704861 1.56438763 1.90880029 3.5782664 ]
 [3.60588272 2.55789806 3.26704861 1.56438763 1.90880029]
 [1.30917891 3.60588272 2.55789806 3.26704861 1.56438763]
 [0.96130538 1.30917891 3.60588272 2.55789806 3.26704861]]
the Frobenius norm of A: 7.208837168639553
the infinity norm of B: 12.966454652614956
the largest singular value of B: 12.56650752516994
the smallest singular value of B: 1.8246744060618487



Exercise 9.4

Power iteration Generate a matrix Z, n × n, with Gaussian entries, and use the power iteration to find the largest eigenvalue and corresponding eigenvector of Z. How many iterations are needed till convergence?
Optional: use the time.clock() method to compare computation time when varying n.

import numpy as np
import time
def foo(n):
    Z = np.random.normal(0, 1, [n, n])
    b_k = np.random.rand(Z.shape[0])
    b_k1 = np.random.rand(Z.shape[0])
    while b_k.all() != b_k1.all():
        b_k1 = np.dot(Z, b_k)
        b_k1_norm = np.linalg.norm(b_k1)
        b_k = b_k1 / b_k1_norm
    # print(b_k)
    # print(np.dot(Z, b_k))
    print("n:", n, "time:", time.clock())
t = time.clock()
foo(5)
foo(10)
foo(100)
foo(1000)
foo(10000)

运行结果:

n: 5 time: 0.00014279107049498438
n: 10 time: 0.0002451910413678816
n: 100 time: 0.001004088603281464
n: 1000 time: 0.07183528623351858
n: 10000 time: 5.034103741410491



Exercise 9.5

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

import numpy as np
import scipy as sp
# print(help(sp.linalg.eigvals))
def foo(p, n):
    C = np.random.binomial(1, p, [n, n])
    # print(sp.linalg.eig(C))
    print("p:", p, "n:", n, max(sp.linalg.eigvals(C)))


foo(.5, 10)
foo(.5, 20)
foo(.5, 100)
foo(.3, 10)
foo(.3, 20)
foo(.3, 100)
foo(.9, 10)
foo(.9, 20)
foo(.9, 100)

运行结果:

p: 0.5 n: 10 (5.641844752967631+0j)
p: 0.5 n: 20 (9.242385892004453+0j)
p: 0.5 n: 100 (50.14720097026784+0j)
p: 0.3 n: 10 (3.456889014392734+0j)
p: 0.3 n: 20 (6.498898769869614+0j)
p: 0.3 n: 100 (30.05949038152027+0j)
p: 0.9 n: 10 (9.010646243839297+0j)
p: 0.9 n: 20 (17.458772002141625+0j)
p: 0.9 n: 100 (90.72610340531895+0j)

规律:

limnmax(eigvals)=np lim n → ∞ m a x ( e i g v a l s ) = n p



Exercise 9.6

Nearest neighbor Write a function that takes a value z and an array A and finds the element in A that is closest to z. The function should return the closest value, not index.
Hint: Use the built-in functionality of Numpy rather than writing code to find this value manually. In particular, use brackets and argmin.

import numpy as np

print(help(np.argmin))
def foo(A, z):
    B = np.abs(A - z)
    return A[np.argmin(B)]

a = np.random.randint(0, 100, 6)
print(a)
b = np.random.randint(100)
print("b:", b, "Nearest neighbor:", foo(a,b))

运行结果:

[17 93 87 77 20 26]
b: 9 Nearest neighbor: 17



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值