1.准备工作
∙
\bullet
∙ numpy是python的库,可以用来处理矩阵。
∙
\bullet
∙ 需要引入numpy库,一般我们简写为np。
#引入numpy
import numpy as np
2.创建矩阵
∙ \bullet ∙ 生成一个二维矩阵(具体的值自己给出)
import numpy as np
#注意这是二维矩阵,所以要将小列表放入一个大列表中
#一维矩阵只需要放入一个列表即可
array = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
print(array)
[[1 2 3]
[4 5 6]
[7 8 9]]
∙ \bullet ∙ 其他生成方法
a = np.zeros((2,3)) #打印2×3的全部为0的矩阵
print(a)
print('\n',end='')
a = np.ones((1,4)) #打印1×4的全部为1的矩阵
print(a)
print('\n',end='')
a = np.arange(1,12,2).reshape(2,3) #从1到12左闭右开步长为2的列表,构建成2×3的矩阵
print(a)
print('\n',end='')
a = np.linspace(0,20,10).reshape(2,5) ##从0到20左闭右闭个数为10的列表,构建成2×5的矩阵
print(a)
a = np.random.randint(0,2,(3,4)) #打印3×4的值为0和1的矩阵
print(a)
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 1. 1. 1.]]
[[ 1 3 5]
[ 7 9 11]]
[[ 0. 2.22222222 4.44444444 6.66666667 8.88888889]
[11.11111111 13.33333333 15.55555556 17.77777778 20. ]]
[[1 0 1 0]
[1 0 1 1]
[1 1 0 1]]
矩阵基本属性
:
print('number of dim:',array.ndim) #矩阵的维度
print('shape:',array.shape) #矩阵的行列数
print('size:',array.size) #矩阵的元素个数
number of dim: 2
shape: (3, 3)
size: 9
3.基本计算
∙ \bullet ∙ 加减乘除
a = np.array([[1,2],
[3,4]])
b = np.arange(4).reshape(2,2)
print(a)
print()
print(b)
print()
c = a+np.cos(b) #加减就是对应位置的元素直接进行加减,可以调用np.cos\np.sin等等
print(c)
print()
c = a*b #对应位置的元素直接进行相乘就直接使用乘法
print(c)
print()
c_dot = np.dot(a,b) #使用矩阵相乘就使用np.dot(a,b)
c_dot_1 = a.dot(b)
print(c_dot)
print(c_dot_1)
[[1 2]
[3 4]]
[[0 1]
[2 3]]
[[2. 2.54030231]
[2.58385316 3.0100075 ]]
[[ 0 2]
[ 6 12]]
[[ 4 7]
[ 8 15]]
[[ 4 7]
[ 8 15]]
∙ \bullet ∙ 求行\列总和、最大值、最小值
a = np.random.random((2,4)) #在0-1之间随机生成2×4的矩阵
print(a)
print()
print(np.sum(a,axis=1)) #返回a矩阵的元素总和,加第二个参数如果为1表示每一行都求和,如果为0表示每一列都求和
print()
print(np.min(a,axis=0)) #返回矩阵的每列最小值
print()
print(np.max(a,axis=1)) #返回矩阵的每行最大值
[[0.77745304 0.56581855 0.64525938 0.62026538]
[0.55598584 0.5881065 0.67757639 0.67117363]]
[2.60879636 2.49284237]
[0.55598584 0.56581855 0.64525938 0.62026538]
[0.77745304 0.67757639]
∙ \bullet ∙ 特殊函数
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.argmin(a)) #返回该矩阵最小值的索引
print(np.argmax(a)) #返回该矩阵最大值的索引
print(np.mean(a)) #返回该矩阵的平均值
print(np.average(a)) #返回该矩阵的平均值
print(np.median(a)) #返回该矩阵的中位数
print(np.cumsum(a)) #在每个位置返回他前面所有数加自己的和
print(np.diff(a)) #每个数分别计算后一个数减自己的差值
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
7.5
7.5
7.5
[ 2 5 9 14 20 27 35 44 54 65 77 90]
[[1 1 1]
[1 1 1]
[1 1 1]]
a = np.arange(4)
print(a)
print(a<3) #返回布尔值,每个数分别和3进行判断
print(a==3) #返回布尔值,每个数分别判断是否等于3
[0 1 2 3]
[ True True True False]
[False False False True]
a = np.array([[1,4,3],
[0,8,5],
[7,2,9]])
print(a)
print()
print(np.nonzero(a)) #返回所有非0数的行列位置信息
print()
print(np.sort(a)) #逐行进行排序
print()
print(np.transpose(a)) #矩阵的转置
print(a.T) #矩阵的转置
print()
print(np.clip(a,4,7)) #将矩阵中小于4的数都变成4,大于7的数都变成7,其他数字不改变
[[1 4 3]
[0 8 5]
[7 2 9]]
(array([0, 0, 0, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 1, 2, 0, 1, 2], dtype=int64))
[[1 3 4]
[0 5 8]
[2 7 9]]
[[1 0 7]
[4 8 2]
[3 5 9]]
[[1 0 7]
[4 8 2]
[3 5 9]]
[[4 4 4]
[4 7 5]
[7 4 7]]
∙ \bullet ∙ 返回索引
a = np.arange(3,15).reshape(3,4)
print(a)
print()
print(a[1]) #打印第二行内容
print()
print(a[1,2]) #打印第二行第三列的元素
print()
print(a[:,2]) #打印第三列
print()
print(a.flatten()) #变成一维数组
print()
for item in a.flat: #迭代器,逐个打印
print(item)
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[ 7 8 9 10]
9
[ 5 9 13]
[ 3 4 5 6 7 8 9 10 11 12 13 14]
3
4
5
6
7
8
9
10
11
12
13
14
∙ \bullet ∙ 合并矩阵
a = np.array([1,1,1])[:,np.newaxis] #将一个数组转换为矩阵
b = np.array([2,2,2])[:,np.newaxis]
print(a)
print()
print(b)
print()
print(np.vstack((a,b))) #vertiacl 竖直方向的合并
print()
print(np.hstack((a,b,a))) #horizontal 水平方向合并
print()
print(np.concatenate((a,b,a),axis=1)) #使用concatenate,只需要在参数加入axis判断如何合并,当它为1时是水平合并
[[1]
[1]
[1]]
[[2]
[2]
[2]]
[[1]
[1]
[1]
[2]
[2]
[2]]
[[1 2 1]
[1 2 1]
[1 2 1]]
[[1 2 1]
[1 2 1]
[1 2 1]]
∙ \bullet ∙ 分割矩阵
a = np.arange(12).reshape(3,4)
print(a)
print()
print(np.split(a,2,axis=1)) #参数axis=1表示列分割,但是只能平均分割,不能出现不均等的分割
print()
print(np.array_split(a,3,axis=1)) #可以不均等的分割
print()
print(np.vsplit(a,3)) #竖直方向的分割
print()
print(np.hsplit(a,2)) #水平方向的分割
print()
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
∙ \bullet ∙ 矩阵拷贝
a = np.arange(4)
print(a)
print()
b = a #直接赋值,他们的地址仍然相同,指向相同的内容,a发生变化b跟着改变
b1 = a.copy() #copy函数,使得b1和a直接没有关联
a[1]=10
print(b)
print()
print(b1)
[0 1 2 3]
[ 0 10 2 3]
[0 1 2 3]