目录
一、基本属性
二、数组创建
1. 建立一个全0矩阵
2.建立一个全1矩阵
3. 创建一个单位矩阵
4.生成一个随机数矩阵
5.创建一个[0,10)区间的随机整型数
6.创建一个矩阵,值为3.14
7.创建一个3*3均值为0,标准差为1的正态分布的随机数数组
ps:np.eye()和np.identity()的区别
三、numpy的相关操作
1.基础运算
2.矩阵乘法
3.矩阵转置
4.求和计算
5.求均值
6.求最值
7.指数运算
8.随机数矩阵
9.排序
10.控制范围
11.数组合并
12.分割
13.深拷贝和浅拷贝
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print(a)
print(a.ndim) #维度
print(a.shape) #x形状
print(a.size) #大小
print(a.dtype) #元素类型
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] 2 (4, 3) 12 int32
a = np.array([1, 2, 3],dtype = np.int32)
print(a.dtype)
b = np.array([1, 2, 3],dtype = np.float)
print(b.dtype)
int32 float64
大小为 3x3; 类型为整型
np.zeros((3,3),dtype=int)
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
大小为4x5
np.ones((4,5))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
大小为4*4
np.eye(4)
np.identity(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
大小为 3x2
np.random.random((3,2))
array([[0.5417957 , 0.6947658 ],
[0.47426902, 0.18598333],
[0.80688502, 0.8270096 ]])
大小为3*3
np.random.randint(0,10,(3,3))
array([[2, 7, 6],
[4, 2, 5],
[7, 8, 8]])
np.full((3,3), 3.14 )
array([[3.14, 3.14, 3.14],
[3.14, 3.14, 3.14],
[3.14, 3.14, 3.14]])
np.random.normal(0,1,(3,3))
array([[-1.15826417, 1.96875436, -0.28209788],
[ 0.93912938, -0.15576503, -0.5111234 ],
[-0.04493866, 0.67364864, 1.04475278]])
要想得到矩阵,只要用mat()函数将数组转换为矩阵即可.
b = np.ones((4,5))
d = np.mat(b)
type(b) #numpy.ndarray
type(d) #numpy.matrix
b
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
d
matrix([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
参数:n,int型表示的是输出的矩阵的行数和列数都是n
dtype:表示的是输出的类型,默认是float
返回的是nxn的主对角线为1,其余地方为0的数组
返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.
参数介绍:
(1)N:int型,表示的是输出的行数
(2)M:int型,可选项,输出的列数,如果没有就默认为N
(3)k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
(4)dtype:数据的类型,可选项,返回的数据的数据类型
(5)order:{‘C’,‘F'},可选项,也就是输出的数组的形式是按照C语言的行优先’C',还是按照Fortran形式的列优先‘F'存储在内存中
np.identity只能创建方形矩阵;np.eye可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。
参考np.eye()和np.identity()
a = np.array([[1,2,3],
[4,5,6]])
b = np.array([[1,1,2],
[2,3,3]])
print(a + b)
print(a - b)
print(a * b) #乘法,对应元素相乘
print(a ** b) #求幂
print(a / b) #除法
print(a % b) #取余
print(a // b) #取整
print(a + 2) #所有元素加2
print(a * 2) #所有元素*2
[[2 3 5] [6 8 9]] [[0 1 1] [2 2 3]] [[ 1 2 6] [ 8 15 18]] [[ 1 2 9] [ 16 125 216]] [[1. 2. 1.5 ] [2. 1.66666667 2. ]] [[0 0 1] [0 2 0]] [[1 2 1] [2 1 2]] [[3 4 5] [6 7 8]] [[ 2 4 6] [ 8 10 12]]
c = a > 3 #判断哪些元素大于1
print(c)
[[False False False] [ True True True]]
d = np.ones((3,5))
np.dot(a,d) #矩阵乘法
a.dot(d)
array([[ 6., 6., 6., 6., 6.], [15., 15., 15., 15., 15.]])
#转置矩阵
print(a)
print(a.T)
print(np.transpose(a))
[[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] [[1 4] [2 5] [3 6]]
x = np.array([[1, 2], [3, 4]], dtype=np.float64)
print(x)
print(np.sum(x)) #求和
print(np.sum(x,axis =0 )) #对列求和
print(np.sum(x,axis = 1)) #对行求和
# 但是对于二维数组b,代码b.sum(axis=0)指定对数组b对每列求和,b.sum(axis=1)是对每行求和,返回的都是一维数组(维度降了一维)。
[[1. 2.] [3. 4.]] 10.0 [4. 6.] [3. 7.]
print(x)
print(np.mean(x))
print(np.mean(x,axis =0))
print(np.mean(x,axis =1))
#axis=0 指定对每列操作,axis=1 对每行操作
[[1. 2.] [3. 4.]] 2.5 [2. 3.] [1.5 3.5]
print(x)
print(np.argmax(x))
print(np.argmax(x, axis =0))
print(np.argmax(x,axis =1))
#axis=0 指定对每列操作,axis=1 对每行操作
[[1. 2.] [3. 4.]] 3 [1 1] [1 1]
print(x)
print(np.exp(x))
[[1. 2.] [3. 4.]] [[ 2.71828183 7.3890561 ] [20.08553692 54.59815003]]
#生成3*2 大小为0~1的随机数
a = np.random.random((3,2))
print(a)
#生成3*2 符合标准正态分布的随机数
b = np.random.normal(size=(3,2))
print(b)
#生成3*2 大小为0~10的随机数
c = np.random.randint(0,10,size=(3,2))
print(c)
[[0.96088609 0.46038883] [0.76186015 0.16310044] [0.19786486 0.50588423]] [[ 0.76954693 -0.37732865] [-1.13219865 0.56850587] [ 1.66137094 0.11051942]] [[4 7] [5 2] [4 8]]
a = np.random.randint(0,10,size=(1,10))
print(a)
print(np.sort(a))
b = np.random.randint(0,10,size=(3,2))
print(b)
print(np.sort(b))
[[4 4 9 8 4 3 1 0 1 2]] [[0 1 1 2 3 4 4 4 8 9]] [[5 9] [2 5] [0 6]] [[5 9] [2 5] [0 6]]
#控制数字范围,大于7位7,小于2为2
print(np.clip(a,2,7))
[[4 4 7 7 4 3 2 2 2 2]]
a = np.array([1,2,3])
b = np.array([4,5,6])
a2 = np.array([[1,2,3],[4,5,6]])
c = np.vstack((a,b))#纵向合并
print(c)
d = np.hstack((a,b)) #横向合并
print(d)
e1 = np.concatenate((a2,a2),axis = 0) #纵向
print(e1)
e2 = np.concatenate((a2,a2),axis = 1) #横向
print(e2)
[[1 2 3] [4 5 6]] [1 2 3 4 5 6] [[1 2 3] [4 5 6] [1 2 3] [4 5 6]] [[1 2 3 1 2 3] [4 5 6 4 5 6]]
#分割
a = np.arange(12).reshape((3,4))
print(a)
b,d = np.split(a,2,axis=1) #列分割,分成两份
#b,d = np.hsplit(a,2)
print(b)
print(d)
b2,d2,c2 = np.split(a,3,axis=0) #行分割,分成两份
#b,d = np.vsplit(a,2)
print(b2)
print(d2)
print(c2)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[0 1] [4 5] [8 9]] [[ 2 3] [ 6 7] [10 11]] [[0 1 2 3]] [[4 5 6 7]] [[ 8 9 10 11]]
#浅拷贝和深拷贝
a = np.array([1,2,3])
b = a #浅拷贝,a,b共享一块内存
b[0] = 9
print(a)
print(b)
c = a.copy()#深拷贝
c[0] =10
print(a)
print(c)
[9 2 3] [9 2 3] [9 2 3] [10 2 3]