python如何生成任意n阶的三对角矩阵

 更新时间:2022年05月11日 09:30:43   作者:潮一  
这篇文章主要介绍了python如何生成任意n阶的三对角矩阵,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

如何生成任意n阶的三对角矩阵

数学作业要求实现共轭梯度法的算法。

题目中的矩阵A是n=400/500/600的三对角矩阵。

在网上查阅资料未果后,自己解决了。

import numpy as np
def generate_matrix(n):
    # 使用对角矩阵相加得到三对角矩阵A
    array_a = np.diag([-2] * n)
    array = np.diag([1] * (n-1))
    a = np.zeros((n-1))
    b = np.zeros(n)
    array_b = np.insert(array, 0, values=a, axis=0)# 添加行
    array_b = np.insert(array_b, (n-1), values=b, axis=1)# 添加列
    array_c = np.insert(array, (n-1), values=a, axis=0)
    array_c = np.insert(array_c, 0, values=b, axis=1)
    matrix_A = array_a + array_b + array_c
    print(array_a)
    print(array_b)
    print(array_c)
    print(matrix_A)

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    n = 5
    generate_matrix(n)

结果输出:

C:\Users\87167\Anaconda3\envs\tf\python.exe C:/Users/87167/PycharmProjects/GongETiDuFa/main.py
[[-2  0  0  0  0]
 [ 0 -2  0  0  0]
 [ 0  0 -2  0  0]
 [ 0  0  0 -2  0]
 [ 0  0  0  0 -2]]
[[0 0 0 0 0]
 [1 0 0 0 0]
 [0 1 0 0 0]
 [0 0 1 0 0]
 [0 0 0 1 0]]
[[0 1 0 0 0]
 [0 0 1 0 0]
 [0 0 0 1 0]
 [0 0 0 0 1]
 [0 0 0 0 0]]
[[-2  1  0  0  0]
 [ 1 -2  1  0  0]
 [ 0  1 -2  1  0]
 [ 0  0  1 -2  1]
 [ 0  0  0  1 -2]]

python矩阵分成上三角下三角和对角三个矩阵

diagonal

Return specified diagonals.

diagflat

Create a 2-D array with the flattened input as a diagonal.

trace

Sum along diagonals.

triu

Upper triangle of an array.

tril

Lower triangle of an array.

先讲一个方阵的对角线下的下三角阵和对角线上的上三角阵提取出来(如果只需要上下三角阵,则去掉tril/triu中的第二个参数)

上代码(这里使用tril和triu都是返回array形式,还需使用mat转换回矩阵):

>>> m = np.mat("1,2,3;4,5,6;7,8,9")
>>> m
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
>>> L = np.tril(m,-1)
>>> L
array([[0, 0, 0],
       [4, 0, 0],
       [7, 8, 0]])
>>> U = np.triu(m,1)
>>> U
array([[0, 2, 3],
       [0, 0, 6],
       [0, 0, 0]])

而单独要提取对角线上的元素作为一个矩阵有如下两种方法:

1、运用np.diag两次,再使用mat转换回矩阵:

>>> D = np.diag(np.diag(m))
>>> D
array([[1, 0, 0],
       [0, 5, 0],
       [0, 0, 9]])
>>> D = np.mat(D)
>>> D
matrix([[1, 0, 0],
        [0, 5, 0],
        [0, 0, 9]])

2、运用下三角矩阵减去次下三角矩阵(即对角线下的下三角阵):

>>> D = np.tril(m) - L
>>> D
array([[1, 0, 0],
       [0, 5, 0],
       [0, 0, 9]])
>>> D = np.mat(D)
>>> D
matrix([[1, 0, 0],
        [0, 5, 0],
        [0, 0, 9]])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python数据分析入门之教你怎么搭建环境

    Python数据分析入门之教你怎么搭建环境

    本篇文章要有一定的Python基础,知道列表,字符串,函数等的用法. 文中有非常详细的代码示例,对正在入门python数据分析的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python深度学习神经网络基本原理

    Python深度学习神经网络基本原理

    人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型
    2021-10-10
  • Python中的Socket 与 ScoketServer 通信及遇到问题解决方法

    Python中的Socket 与 ScoketServer 通信及遇到问题解决方法

    Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。本文通过实例代码给大家介绍Python中的Socket 与 ScoketServer 通信及遇到问题解决方法 ,需要的朋友参考下吧
    2019-04-04
  • Go1.16引入目录遍历优化解析

    Go1.16引入目录遍历优化解析

    Go1.16版本中,对目录遍历进行了显著的优化,新增的接口os.ReadDir、(*os.File).ReadDir和filepath.WalkDir使用fs.DirEntry代替os.FileInfo,减少了系统调用次数,提高了遍历效率,测试显示,优化后的遍历速度比原先快了480%
    2024-10-10
  • 使用Python的Twisted框架编写简单的网络客户端

    使用Python的Twisted框架编写简单的网络客户端

    这篇文章主要介绍了使用Python的Twisted框架编写简单的网络客户端,翻译自Twisted文档,包括一个简单的IRC客户端的实现,需要的朋友可以参考下
    2015-04-04
  • Python调用Matplotlib绘制振动图、箱型图和提琴图

    Python调用Matplotlib绘制振动图、箱型图和提琴图

    Matplotlib作为用于数据可视化的Python软件包,能够绘制多种2D图像,它使用简单、代码清晰易懂,深受广大技术爱好者喜爱。本文主要介绍了通过 Matplotlib绘制振动图、箱型图、提琴图,需要的朋友可以参考一下
    2021-12-12
  • Python自动发送和收取邮件的方法

    Python自动发送和收取邮件的方法

    这篇文章主要介绍了Python自动发送和收取邮件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python统计文本词汇出现次数的实例代码

    Python统计文本词汇出现次数的实例代码

    这篇文章主要介绍了Python统计文本词汇出现次数,这种问题在统计文本词汇的次数时经常会遇到,今天给大家分享解决方案,通过实例代码给大家讲解,需要的朋友可以参考下
    2020-02-02
  • 把JSON数据格式转换为Python的类对象方法详解(两种方法)

    把JSON数据格式转换为Python的类对象方法详解(两种方法)

    本文通过两种方法给大家介绍了把JSON数据格式转换为Python的类对象,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-06-06
  • Flask框架WTForm表单用法示例

    Flask框架WTForm表单用法示例

    这篇文章主要介绍了Flask框架WTForm表单用法,结合登录验证的具体实例分析了Flask框架WTForm表单相关使用技巧,需要的朋友可以参考下
    2018-07-07

最新评论