【python】用scipy生成特殊矩阵

这篇具有很好参考价值的文章主要介绍了【python】用scipy生成特殊矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

scipy.linalg中提供了一系列特殊矩阵的生成方法,包括循环矩阵、汉克尔矩阵、费德勒矩阵、阿达马矩阵、莱斯利矩阵、希尔伯特及其逆矩阵、帕斯卡及其逆矩阵等。

循环矩阵

现有一向量 c = [ c 0 , c 1 , ⋯   , c n ] c=[c_0, c_1,\cdots,c_n] c=[c0,c1,,cn],则circulant(c)返回一个矩阵,记作 A A A,矩阵第 i i i行第 j j j列元素为 a i j a_{ij} aij,则 a i j = c mod ⁡ ( i − j , n ) a_{ij} = c_{\operatorname{mod}(i-j, n)} aij=cmod(ij,n)

A = circulant([1,2,3])
print(A)
'''
[[1 3 2]
 [2 1 3]
 [3 2 1]]
'''

汉克尔矩阵

汉克尔矩阵和循环矩阵十分相似,不过在向左移位的过程中,hankel(c, r=None)在末尾直接赋0。若r不为None,则通过r对末位进行赋值

print(hankel([1,2,3,4], [0,7,7,8,9]))
'''
[[1 2 3 4 7]
 [2 3 4 7 7]
 [3 4 7 7 8]
 [4 7 7 8 9]]
'''

费德勒矩阵

现有一向量 a = [ a 0 , a 1 , ⋯   , a n ] a=[a_0, a_1,\cdots,a_n] a=[a0,a1,,an],则fiedler(a)返回一个矩阵,记作 F F F,设 F F F i i i行第 j j j列元素为 f i j f_{ij} fij,则 f i j = ∣ a i − a j ∣ f_{ij}=\vert a_i-a_j\vert fij=aiaj,所以显而易见,其对角元素均为0。

F = fiedler([1,2,4,8,16])
print(F)
'''
[[ 0  1  3  7 15]
 [ 1  0  2  6 14]
 [ 3  2  0  4 12]
 [ 7  6  4  0  8]
 [15 14 12  8  0]]
'''

阿达马矩阵

阿达马矩阵的每个元素都是 ± 1 \pm1 ±1,每行都互相正交,常用于纠错码。在scipy.linalg中,hadamard(n, dtype)根据n来生成标准的 n × n n\times n n×n阿达马矩阵,需要注意 n n n必须为偶数,dtype为可选参数,用于指明矩阵的数据类型。

print(hadamard(4))
'''
[[ 1  1  1  1]
 [ 1 -1  1 -1]
 [ 1  1 -1 -1]
 [ 1 -1 -1  1]]
'''

莱斯利矩阵

leslie(f, s),其输入 f f f s s s两个向量,输出矩阵的形式为

[ f 1 f 2 ⋯ f m − 1 f m s 1 0 ⋯ 0 0 0 s 2 ⋯ 0 0 ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ s m − 1 0 ] \begin{bmatrix} f_1&f_2&\cdots&f_{m-1}&f_m\\ s_1&0&\cdots&0&0\\ 0&s_2&\cdots&0&0\\ \vdots&\vdots&&\vdots&\vdots\\ 0&0&\cdots&s_{m-1}&0 \end{bmatrix} f1s100f20s20fm100sm1fm000

print(leslie([0.1, 2.0, 1.0, 0.1], [0.2, 0.8, 0.7]))
'''
[[0.1 2.  1.  0.1]
 [0.2 0.  0.  0. ]
 [0.  0.8 0.  0. ]
 [0.  0.  0.7 0. ]]
'''

希尔伯特及其逆矩阵

hilbert(n)返回一个 n × n n\times n n×n矩阵 H H H,第 i i i行第 j j j列元素 h i j = 1 i + j + 1 h_{ij}=\frac{1}{i+j+1} hij=i+j+11

print(hilbert(3))
'''
[[1.         0.5        0.33333333]
 [0.5        0.33333333 0.25      ]
 [0.33333333 0.25       0.2       ]]
'''

invhilbert(n, exact=False)可生成 n × n n\times n n×n希尔伯特矩阵的逆矩阵,当exactFalse时,返回np.float64类型矩阵;否则返回np.int64类型。

帕斯卡及其逆矩阵

帕斯卡矩阵存在一个递推关系,即 a i j = a i − 1 , j + a i , j − 1 a_{ij}=a_{i-1,j}+a{i,j-1} aij=ai1,j+ai,j1,且 a i 0 = 1 , a 0 j = 1 a_{i0}=1,a_{0j}=1 ai0=1a0j=1,从形状上看就是倒过来的帕斯卡三角。在pascal(n, kind, exact)函数中,kind可选symmetric, lower,upper,分别表示对称矩阵、下三角、上三角矩阵,默认symmetric

print(pascal(4))
'''
[[ 1  1  1  1]
 [ 1  2  3  4]
 [ 1  3  6 10]
 [ 1  4 10 20]]
'''

invpascal可生成逆帕斯卡矩阵,其参数与pascal相同。文章来源地址https://www.toymoban.com/news/detail-597437.html

到了这里,关于【python】用scipy生成特殊矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,近似熵,包络熵,频谱图,希尔伯特变换,包含所有程序MATLAB代码,-西储大学数据集为例

    目录 目录 1.选取数据 2.VMD函数-matlab代码   3.采用matlab脚本导入数据并做VMD分解  4.计算中心频率 5.结果展示  6.智能算法优化VMD参数 选取1797转速下的内圈故障数据,也就是105.mat,数据集可以在官网下载。 下载数据文件|凯斯工程学院 |凯斯西储大学 (case.edu) https://engineering

    2023年04月17日
    浏览(32)
  • 【scipy.sparse包】Python稀疏矩阵详解

    数组和矩阵是数值计算的基础元素 。目前为止,我们都是使用NumPy的ndarray数据结构来表示数组,这是一种同构的容器,用于存储数组的所有元素。 有一种特殊情况, 矩阵的大部分元素都为零,这种矩阵被称为稀疏矩阵 。对于稀疏矩阵,将所有零保存在计算机内存中的效率很

    2024年01月21日
    浏览(28)
  • 【Python】scipy稀疏矩阵的奇异值分解svds

    当 A A A 是方阵时,可以很容易地进行特征分解: A = W Σ W − 1 A=WSigma W^{-1} A = W Σ W − 1 ,其中 Σ Sigma Σ 是 A A A 的特征值组成的对角矩阵。如果 W W W 由标准正交基组成,则 W − 1 = W T W^{-1}=W^T W − 1 = W T ,特征分解可进一步写成 W T Σ W W^TSigma W W T Σ W 。 然而,当 A A A 不是方

    2024年02月12日
    浏览(33)
  • 循环码生成矩阵与监督 (校验) 矩阵

    本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 定义:记 C ( x ) mathrm{C}(x) C ( x ) 为 (n, k) 循环码的所有码字对应的多项式的集

    2024年02月06日
    浏览(32)
  • Scipy 高级教程——稀疏矩阵

    Scipy 提供了处理稀疏矩阵的工具,这对于处理大规模数据集中的稀疏数据是非常有效的。本篇博客将深入介绍 Scipy 中的稀疏矩阵功能,并通过实例演示如何应用这些工具。 1. 稀疏矩阵的表示 在 Scipy 中,稀疏矩阵可以使用 scipy.sparse 模块进行表示。常用的稀疏矩阵类型有 cs

    2024年01月17日
    浏览(23)
  • 【scipy 基础】--稀疏矩阵

    稀疏矩阵 是一种特殊的矩阵,其非零元素数目远远少于零元素数目,并且非零元素分布没有规律。 这种矩阵在实际应用中经常出现,例如在物理学、图形学和网络通信等领域。 稀疏矩阵 其实也可以和一般的矩阵一样处理,之所以要把它区分开来进行特殊处理,是因为: 一

    2024年02月05日
    浏览(29)
  • 【Python】计算几何:德劳内三角剖分算法 | 利用 scatter 绘制散点图 | 实现外接圆生成 | scipy库的 Dealunay 函数 | 实战: A-B间欧氏距离计算

       猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍 💭 写在前面 :本章我们将介绍的是计算机和领域的 Delaunay 三角剖分算法(即德劳内三角剖分),它是一种用于将点集划分成三角形网格的算法。点集的三角剖分属于计算几何学科范畴,对数值分析、有限元分析与图形学

    2024年02月02日
    浏览(32)
  • 【计算几何】Python:德劳内三角剖分算法 | 利用 scatter 绘制散点图 | 实现外接圆生成 | scipy库的 Dealunay 函数 | 实战: A-B间欧氏距离计算

       猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍 💭 写在前面 :本章我们将介绍的是计算机和领域的 Delaunay 三角剖分算法(即德劳内三角剖分),它是一种用于将点集划分成三角形网格的算法。点集的三角剖分属于计算几何学科范畴,对数值分析、有限元分析与图形学

    2024年02月03日
    浏览(29)
  • numpy 邻接矩阵转稀疏矩阵 array to scipy csr_matrix

    也就是说,一个dense的numpy矩阵,如何转换成scipy包里面的sparse的csr矩阵看代码: 输出: print(csr_a.toarray()) print(csr_a.tocoo())

    2024年02月12日
    浏览(39)
  • Python 二维矩阵加一个变量运算该如何避免 for 循环

    今天写代码的时候遇到了一个问题,比如我们需要做一个二维矩阵运算,其中一个矩阵是 2x2 的,另一个是 2x1 的。在这个二维矩阵中,其中各个参数会随着一个参数变化,我们需要对这个变化的参数进行采样,那么我们可否不使用 for 循环来处理这一问题呢? 阅读这一篇前,

    2024年02月19日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包