python数组和矩阵的用法解读
作者:wxyld
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)))
输出结果都是
他们得到的矩阵性质不同,在矩阵乘法的使用也不同。
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指的是常数项矩阵:
使用点乘的方法可以验证一下,系数乘以未知数可以得到常数项
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。