一、数组基础
1.1Numpy库引入
improt numpy as np
1.2 数据类型
(1)整数型数组和浮点型数组
import numpy as np
a = np.array([1,2,3]) #当数据全部事整数时数组为整数类型
b = np.array(1.0,2,3) # 只要由浮点型数组类型为浮点型
注意numpy中数组用print打印没有逗号分割,这样可以避免和原本列表类型和小数点分开
(2)同化
往整数数组插入浮点数,小数部分会被截取,同理向浮点型数组插入整数,整数会变为浮点数
(3)类型转换
由此我们可以进行整数类型数组的升级:
print(arr+0.0) #arr为整数类型数组
print(arr*1.0)
print(arr/1)
print(arr1+arr2) #arr1或者2中有一个为浮点类型这里
#这里相加是每个元素分别相加
1.2 数组和维度
(1)一维数组和二维数组
不同维度数组,区别在于中括号数目的不同,一、二、三维数组中括号数量为1,2,3
数组的形状参数:一维:x 代表有x个元素的一维数组
二维: (x,y)代表x行y列的数组
三维: (x,y,z) 代表长宽高分别为x,y,z的三维数组
注意的是这个形状参数里的括号一定不能丢
下面介绍两个方法函数: np.ones 和np.shape
np.ones :
括号里传入形状参数,将整个数组用1填充,返回值就是一个相应维度的数组
np.shape :
返回一个数组的形状参数
import numpy as np
b = np.ones((3,3))
print(b)
print(b.shape)
输出结果:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
(3, 3)
(2)数组维度的转化
import numpy as np
#一维数组升级到二维数组
a = np.arange(10)
print(a)
aa = a.reshape(2,-1) #列给-1时会自动计算列数
aaa = a.reshape(2,5)
print(aa)
print(aa.shape)
print(aaa.shape)
#二维降到一维
c = np.ones((3,4))
cc = c.reshape(-1) #传入-1就默认化为一列
print(cc)
#二维数组的相互转化
b = np.ones((3,4)) #三行四列的数组
print(b)
bb = b.reshape((4,3)) #变为四行三列的数组
print(bb)
二、数组索引
2.1 访问数组元素
import numpy as np
a1 =np.arange(10)
print(a1[2]) #访问第三个元素
print(a1[-1]) #访问倒数第一个元素
a1 = a1.reshape(2,-1)
print(a1[1,2]) #访问第二行第三个元素
2.2 数组中元素的截取
(1)一维向量的截取
import numpy as np
a1 =np.arange(10)
print(a1[2:3]) #截取第三和第四个元素
print(a1[2:-2]) #从第三个到倒数第二个
print(a1[2:-2:2]) #从第三个到倒数第二个,步长为2
(2)二维矩阵的截取
import numpy as np
a1 =np.arange(1,21).reshape(4,5)
print(a1[1:3,2:4])
#这个截取的意思是截取第二到三行,第三到第四
print(a1[1,:]) #截取第二行
print(a1[:,2]) #截取第三列
三、数组变形
3.1 数组转置
利用方法函数 .T 即可
import numpy as np
a1 =np.arange(1,21).reshape(4,5)
print(a1)
a2 = a1.T
print(a2)
输出结果:
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]]
[[ 1 6 11 16]
[ 2 7 12 17]
[ 3 8 13 18]
[ 4 9 14 19]
[ 5 10 15 20]]
3.2 数组的翻转
主要分为两个:上下翻转( np.flipud() )和左右翻转( np.fliplr() )
import numpy as np
a1 =np.arange(1,21).reshape(4,5)
print(a1)
a2 = np.flipud(a1)
a3 = np.fliplr(a1)
print(a2)
print(a3)
输出结果 :
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]]
[[16 17 18 19 20]
[11 12 13 14 15]
[ 6 7 8 9 10]
[ 1 2 3 4 5]]
[[ 5 4 3 2 1]
[10 9 8 7 6]
[15 14 13 12 11]
[20 19 18 17 16]]
3.3 向量和矩阵的拼接
import numpy as np
#向量的拼接
arr1 = np.array( [1,2,3] )
print(arr1)
arr2 = np.array( [4,5,6] )
print(arr2)
arr3 = np.concatenate( [arr1,arr2] )
print(arr3)
#矩阵的拼接
#按行拼接
arr3 = np.concatenate( [arr1,arr2] ) # 默认参数 axis=0
print(arr3)
#按列拼接
arr4 = np.concatenate( [arr1,arr2] ,axis=1 )
print(arr4)
四、数组的运算
4.1 与单个系数之间的关系
与单个系数进行运算,就是每个元素分别对其进行运算,得到的矩阵规模不变
import numpy as np
a1 = np.arange(1,21).reshape(4,5)
print(a1 *5)
print(a1 +5)
print(a1 -5)
print(a1 /5)
#.......还有// ** % 等运算符
4.2 数组与数组之间的关系
(1) 同规模数组之间的逐元素运算
import numpy as np
a1 = np.arange(1,21).reshape(4,5)
a2 = -a1
print(a1+a2)
print(a1 -a2)
print(a1*a2)
print(a1 /a2)
运算是每个相同位置的元素进行一次运算,和矩阵的乘法不同
(2)矩阵的乘积运算
运用函数 np.dot()
当矩阵乘积中混有向量时,根据需求,其可充当行矩阵,也可充当列矩阵,
但混有向量时输出结果必为向量。
import numpy as np
arr1 = np.arange(5)
arr2 = np.arange(15).reshape(5,3)
print(arr1)
print(arr2)
print( np.dot(arr1,arr2) )