一、矩阵的规格、类型
import numpy as np #导入矩阵模块并起别名
al=np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]]) #利用矩阵方法创建一个数组
print("初始矩阵")
print(al)
print("初始的矩阵规格")
print(al.shape) #展示当前矩阵规格
print("初始的矩阵的数据类型")
print(al.dtype) #展示当前矩阵数据类型
x=al.reshape(2,6) #将矩阵变成2行6列的形式,reshape无法改变原来的矩阵,只是返回一个变换后的结果
print("变换后的矩阵")
print(x)
注意:reshape用法
import numpy as np
al=np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])
x=al.reshape(2,6) #改变矩阵的规格
print("al",al.shape) #原矩阵
print("x",x.shape) #改变后的矩阵
结果发现原矩阵没有改变
二、特殊矩阵的创建
import numpy as np
x=np.arange(0,100,2) #功能:从0开始到100,但不包括100,以2为间隔的数增加的数集合的数组
print("等间隔数组为")
print(x)
print("等分数组为")
x2=np.linspace(0,1,5) #功能:从0到1的五个等分点的数组(包括0和1)
print(x2)
print("等比数组为")
x3=np.logspace(0,2,5) #功能:从10的0次方开始到10的2次方(包括连着),组成的5个数的等比数列的数组
print(x3)
print("对角线数组为") #功能:创建一个4行4列的正方形矩阵
x4=np.diag([1,2,3,4])
print(x4)
print("0矩阵为") #功能:创建一个4行5列的全0矩阵
x5=np.zeros((4,5))
print(x5)
print('单位矩阵为') #功能:创建一个5行3列的全1矩阵
x6=np.ones((5,3))
print(x6)
习题:如何求5-155之间的等比数列
import math
i=math.log(5,10) #对应的每一个数取对数
j=math.log(155,10)
x4=np.logspace(i,j,10) #logspace表示对应的数中前两个参数表示:计算的时候都是10的n次方形式,所以要取对数
print(x4)
补充:结构体的定义
df=np.dtype([("name",np.str_,40),("numitems",np.int64),("price",np.float64)])
items=np.array([("tomatoes",42,4.5),("egg",100,3.4)],dtype=df)
print(items)
三、矩阵中的随机数用法
1. 传统的随机数的使用
import random
print("产生0-100的任意随机整数,随机数为")
print(random.randint(0,100))
print("在x数组中挑选一个随机数,随机数为")
x=[3,4,5,6,900,23]
print(random.choice(x))
print("在改变x的数组顺序,改变后的数组为")
random.shuffle(x)
print(x)
2.numpy中的随机数用法
print("生成一个包含10个随机数正太分布的数组")
print(np.random.randn(10))
print("生成一个3行4列且在0-1之间均匀分布的随机数矩阵")
print(np.random.rand(3,4))
print("生成在0-1之间含有100个数均匀分布的随机数数组")
print(np.random.random(100))
四、矩阵计算
1.矩阵内部求和计算
1. 一维矩阵的求和
x=np.random.randn(1000)
s=0
for i in x:
s+=i
print(s)
2.二维矩阵的求和
x=np.random.randn(1000)
y=x.reshape(200,5) #变换为二维矩阵
s=0
for i in y: #遍历行
for j in i: #遍历列
s=s+j
print(s)
2.矩阵之间的计算
1.一维矩阵
x=np.array([1,2,3])
y=np.array([10,20,30])
print("两数组之和")
print(x+y)
print("两数组之积")
print(x*y)
2.二维矩阵
m1=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
m2=np.matrix(np.ones((3,3)))
print("两矩阵之和")
print(m1+m2)
print("两矩阵之积")
print(m1*m2)
print("m1的逆矩阵")
print(m1.I) #矩阵m1.I就表示m1的逆矩阵
3.一维和二维矩阵混杂求和
arr1=np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
print("矩阵1为")
print(arr1)
print("矩阵2为")
arr2=np.array([1,1,1])
print(arr2)
print("两矩阵之和") #求和是一维数组和二维数组的每一行都要相加
print(arr1+arr2)
四.矩阵切片的使用
x=np.array([10,20,30,40,50,60])
y=np.array([[1,2,3],[4,5,6],[7,8,9]])
print("一维矩阵的切片")
print(x[2:5]) #表示取从x数组下标2一直到下标5数的切片(不包含5)
print("二维矩阵y为")
print(y)
print("二维矩阵y的一次切片")
print(y[0:2]) #表示取从第0行开始一直到第2行的所有数的切片(不包括第2行)
print("二维矩阵y的二次切片")
print(y[0:2,0:2]) #表示先取0到2行(不包括第2行),再从中截取第0到第2列(不包括第2列)
print("挑选y数组第1行第1列的数为")
print(y[0][0])
print("不连续挑选")
print(y[0,(0,2)]) #y[0,(0,2)]表示对挑选y矩阵的y[0][0]和y[0][2]
五、字符串和矩阵存放
1. 存放字符串
open("C:/test.txt",'w').write("asdfg") #注意对应的引号是中文还是英文形式
open("C:/test.txt",'r').read()
2. 单个矩阵的存放
arr1=[1,2,3,4,5]
np.save("c:/test1",arr1) #存放矩阵到对应的路径
x=np.load("c:/test1.npy") #单个矩阵读取时,读取文件要加后缀npy
print(x)
3. 多个矩阵的存放
arr1=np.array([1,2,3])
arr2=np.array([4,5,6])
arr3=np.array([7,8,9])
np.savez("c:/test2",arr1,arr2,arr3) #存放多个文件的格式
dat=np.load("c:/test2.npz") #多个矩阵读取时,读取文件要加后缀npz
print("数组1为")
print(dat["arr_0"]) #按照存放dat["arr_0"]表示之前存放的第一个矩阵
print("数组2为")
print(dat["arr_1"])
print("数组3为")
print(dat["arr_2"])