热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高编课后作业------第十一周-Numpyexercise

GeneratematricesA,withrandomGaussianentries,B,aToeplitzmatrix,whereAR
Generate matrices A , with random Gaussian entries, B , a Toeplitz matrix, where A   R n × m and B   R m × m ,

for n = 200, m = 500.  为了显示方便,用规模小一点的矩阵,n=10,m=25

  

from scipy.linalg import toeplitz
import numpy as np
#选用服从 N(0,1)的正态分布 , 生成之后 reshape
A = np.random.normal(0,1,100000)
A = A.reshape(200,500)
B = toeplitz(list(range(1,501)))
A2 = A+A
AAt = A@A.T
AtA = A.T@A
AmB = A@B

def compute(A,B,lam):
    temp = B-lam*np.eye(500)
    return A@temp

print(compute(A,B,3))

在上面基础上,加上:

b = np.array(list(range(1,501)))
x = np.linalg.solve(B,b)

    norm(矩阵,哪种范数) , Frobenius范数就是'fro', 无穷范数就是np.inf 。然后就是svd分解函数,full_matrices=True就是全部分解

na = np.linalg.norm(A,'fro')
nb = np.linalg.norm(B,np.inf)

u, s, vh = np.linalg.svd(B,full_matrices=True)
maxvalue = max(s)
minvalue = min(s)


就是用幂法求主特征值和主特征向量,数值计算刚刚学过就用上了,精度设置为1e-4,返回值为

lam:主特征值

u:规格化之后的主特征向量

cnt: 迭代次数

cost:使用的时间

n = 100
Z = np.random.normal(5,1,n*n).reshape(n,n)
def powerit(Z,n):
    from time import clock
    start = clock()
    u = np.random.normal(5,1,n)
    last = 1000
    lam = 0
    cnt = 0
    while abs(last-lam) > 0.0001:
        cnt = cnt+1
        v = Z@u
        big = -1
        last = lam
        for vv in v:
            if abs(vv)>big:
                lam = vv
                big = abs(vv)
        u = v/lam
    end = clock()
    return lam, u, cnt, end-start

n=100时,只用6次就收敛了。。。


改成n=1000,甚至精度改成了1e-10,也只用了8次.....这个收敛速度是真的快.....


写到这里才发现生成正态分布矩阵的参数中有一个size参数 可以直接生成2维矩阵........

0-1分布是一种特殊的二项分布,而numpy.random里只有二项分布,所以就用n=1的二项分布生成。。。

for n in (10,50,100):
    for p in (0.2,0.5,0.8):
        print("n = %d, p = %.3f" % (n,p))
        C = np.random.binomial(1,p,(n,n))
        u, s, vh = np.linalg.svd(C,full_matrices=True)
        maxvalue = max(s)
        print(maxvalue)
结果是:

可以看到随着n和p的增加,最大奇异值maxvalue也会增加。

而且好像是成倍增加的!!!

大概是 maxvalue = t * n * p的形式


def closest(A,z):
    B = A - z
    idx = np.argmin(np.abs(B))
    return A[idx]
    

提示说用argmin,就是获取最小值的下标,而离z最近的元素,就是先把A每项都减去z,然后取绝对值,哪一项绝对值最小哪一项就离z最近,然后通过argmin获取下标,返回原矩阵A中的idx下标的值就可以了。



推荐阅读
  • AI炼金术:KNN分类器的构建与应用
    本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。 ... [详细]
  • 本文将详细介绍如何使用Java编程语言生成指定数量的不重复随机数,包括具体的实现方法和代码示例。适合初学者和有一定基础的开发者参考。 ... [详细]
  • Exploring issues and solutions when defining multiple Faust agents programmatically. ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 本文详细介绍了如何在PyQt5中创建简易对话框,包括对话框的基本结构、布局管理以及源代码实现。通过实例代码,展示了如何设置窗口部件、布局方式及对话框的基本操作。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文探讨了在已知最终数组尺寸不会超过5000x10的情况下,如何利用预分配和调整大小的方法来优化Numpy数组的创建过程,以提高性能并减少内存消耗。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文介绍了多维缩放(MDS)技术,这是一种将高维数据映射到低维空间的方法,通过保持原始数据间的关系,以便于可视化和分析。文章详细描述了MDS的原理和实现过程,并提供了Python代码示例。 ... [详细]
author-avatar
吉樺雄_910
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有