python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python数组和矩阵用法

python数组和矩阵的用法解读

作者:wxyld

这篇文章主要介绍了python数组和矩阵的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python数组和矩阵

先创建一个一维数组

直接定义一个数组:

a = [1,2,3,4,5]
b = ['a','c','c','s']
print(a)
print(b)

输出结果:

通过键盘输入一个数组,每个数用空格隔开:

a = input().split(' ')
print(a)

输出结果:

但是这个时候返回的a是一个字符串类型的列表,要转换为想要的类型该怎么做呢?

转换成int类型:

a = input().split(' ')
print(a)
#遍历每个元素进行转换
c=[]
for i in a:
   c.append(int(i))
for i in range(0,len(c)):
    print(c[i],end=" ")
print()
#使用内置函数map()
d=list(map(int,a))
for i in range(0,len(d)):
    print(d[i],end=" ")
print()
#利用列表的推导式
e=[int(i) for i in a]
for i in range(0,len(e)):
    print(e[i],end=" ")

输出结果:

二维数组该如何创建呢?

直接循环定义:

arr = [[0] * 3 for i in range(2)]
print(arr)
arr[0][1] = 1
print(arr)

高级方法有没有?当然有,就是numpy包的使用

import numpy as np
#创建全零数组,使用频率高
#dtype 默认float类型
arr = np.zeros((2,5),dtype=int)
print(arr)
arr[1][0] = 1
print(arr)
#可以将两个创建好的一维数组生成一个二维数组
a = np.array([[1,2,3],[4,5,6]])
print(a)
a[0][0] = 0
print(a)

数组与矩阵

矩阵是一种二维数据结构,和二维数组相似,但二者又有很大差别。很多时候我们都直接将二维数组当作矩阵运算

其实就是numpy中mat()函数和array()函数的区别:

聊区别就先看看他们的相同的用法,两者都可以进行矩阵运算

import numpy as np
a1 = np.array([[1,2,3], [4,5,6]])
b1 = np.mat([[1,2,3], [4,5,6]])
a2 = np.array(([1,2,3], [4,5,6]))
b2 = np.mat(([1,2,3], [4,5,6]))
a3 = np.array(((1,2,3), (4,5,6)))
b3 = np.mat(((1,2,3), (4,5,6)))

输出结果都是

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLtREpG7-1639061623832)(C:\Users\标哥np\Desktop\学习笔记\image-20211209220322114.png)]

他们得到的矩阵性质不同,在矩阵乘法的使用也不同。

mat()和 array ()后面加上 .T 得到转置。但是mat()还可以在后面加 .H 得到共轭矩阵, 加 .I 得到逆矩阵

array()乘法:*代表点乘(对应元素相乘),dot()代表矩阵乘(叉乘)。

mat()乘法:*代表矩阵乘(叉乘),multiply()代表点乘。

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = np.mat([[1,2,3], [4,5,6],[7,8,9]])
c = np.ones((3,3),dtype=int)
print(a)
print(b)
print(c)
#叉乘
print(np.dot(a,c))
print(np.dot(b,c))
#点乘
print(np.multiply(b,c))
print(a*c)

输出结果:

array()的平方是矩阵对应位置数的平方,mat()的平方是矩阵乘积

print("a的平方",a**2)
print("b的平方",b**2)

输出结果:

python矩阵的基本运算

一、python矩阵操作

先引入numpy,以后的教程中,我们都引用为np作为简写

使用mat函数创建一个2X3矩阵

使用shape获取矩阵大小

使用下标读取矩阵中的元素

进行行业转换

通常情况下,使用二维数组代替矩阵来进行矩阵运算,可见矩阵和数组基本上都可以

加减法同样

当然列表是不能这么尽兴加减的

二、python矩阵乘法

使用Python的numpy包进行矩阵的乘法运算

使用二位数组创建两个矩阵A和B

矩阵的数乘,即矩阵的每一个元素乘以该数

dot函数用于矩阵乘法,对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是内积。注意交换矩阵的前后位置会导致不同的结果

再建立一个二位数组

验证矩阵乘法的结合性(AB)C=A(BC)

加法的分配性:(A+B)C=AC+BC,C(A+B)=CA+CB

数乘的结合性

使用eye创建一个单位矩阵

一个矩阵

A乘以一个单位矩阵,还是它本身

三、python矩阵转置

矩阵的转置很简单,就是将矩阵的行变为列,将列变为行

创建一个矩阵D,使用属性T得到矩阵D的转置矩阵E

矩阵转置的基本性质:

验证性质1:(A’)’=A

验证性质2:(A±B)’=A’±B’:

创建两个尺寸相同的矩阵

验证性质3:(KA)’=KA’

验证性质4:(A×B)’= B’×A’

四、python求方阵的迹

方阵的迹就是主对角元素之和

创建一个方阵(方阵也就是行数等于列数的矩阵)

用trace计算方阵的迹

.创建一个方阵F

验证一下方阵的迹等于方阵的转置的迹

验证一下方阵的乘积的迹等于

五、python方阵的行列式计算方法

计算方阵的行列式,用到的是numpy模块的linalg.det方法

行列式的算法:这是二阶方阵行列式:

行列式的算法:这是三阶行列式

利用E,F进行行列的计算

使用det方法求得方阵E和方阵F的行列式

六、python求逆矩阵/伴随矩阵

设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。当矩阵A的行列式|A|不等于0时才存在可逆矩阵。而伴随矩阵的定义:

先来求一下矩阵的逆,先引入numpy

创建一个方阵

使用linalg.det求得方阵的行列式

使用linalg.inv求得方阵A的逆矩阵

利用公式:

numpy的计算方法:

七、python解多元一次方程用python的

用python的numpy包中的linalg.solve()方法解多元一次方程

首先看一下我们要解的方程,将这个方程格式调整好,按照x-y-z-常数项的顺序排列

将未知数的系数写下来,排列成一个矩阵

a={[1,2,1],
[2,-1,3],
[3,1,2]}

常数项构成一个一维数组(向量)

使用linalg.solve方法解方程,参数a指的是系数矩阵,参数b指的是常数项矩阵:

使用点乘的方法可以验证一下,系数乘以未知数可以得到常数项

总结

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

您可能感兴趣的文章:
阅读全文