Numpy库
Numpy库
导入NumpyNumerical Python(Py数值计算)库,引用缩写别名np调用函数库
import numpy as np
Numpy核心是N维数组对象 ndarray (N-dimensional array)
调用np.array()
- 常用属性
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型(bool_,int(8,16,32,64),uint(8,16,32,64),float64)
size 数组元素的个数
ndim 数组元素的维度
shape 数组元素的结构形状(元组形式)
创建一维数组
array_1x6 = np.array([1.0,2.0,3.0,4.0,5.0,6.0],dtype = np.float64)
#打印结果 [1,2,3,4,5,6] print(array_1x6.ndim) #打印结果1 空间维度1 print(array_1x6.shape) #打印结果(6,) 矩阵6列 print(arrary_1x6.dtype) #打印结果float64
二维数组
array_2x6 = np.array([[1.0,2.0,3.0,4.0,5.0,6.0],[1.1,2.1,3.1,4.1,5.1,6.1]],dtype = np.float64) print(array_2x6.ndim)
#打印结果1 维度2 print(array_1x6.shape) #打印结果(2,6) 矩阵2行6列
三维数组
array_2x3x6 = np.array([[[1.0,2.0,3.0,4.0,5.0,6.0],[1.1,2.1,3.1,4.1,5.1,6.1],
[1.1,2.1,3.1,4.1,5.1,6.1]],
[[1.0,2.0,3.0,4.0,5.0,6.0],[1.1,2.1,3.1,4.1,5.1,6.1],
[1.1,2.1,3.1,4.1,5.1,6.1]]])
print(array_2x3x6.ndim)
#打印结果3 维度3
print(array_2x3x6.shape)
#打印结果(2,3,6) 2组3行6列
- N维数组对象的特性
#python for....in循环运算
list_4x3_a = [[1,1,1],[2,2,2],[3,3,3],[3,3,3]]
list_4x3_b = [[5,5,5],[5,5,5],[5,5,5],[5,5,5]]
list_4x3_c = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
for i in range(0,4,1): #迭代0到4不包括4,步数1
for j in range(3):
list_4x3_c[i][j] = list_4x3_a[i][j]+list_4x3_b[i][j]
print(list_4x3_c)
#使用 Numpy可以矢量运算更佳便捷
list_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[3,3,3]])
list_4x3_b = np.array([[5,5,5],[5,5,5],[5,5,5],[5,5,5]])
list_4x3_c = np.array([[0,0,0],[0,0,0],[0,0,0],[0,0,0]])
list_4x3_c = list_4x3_a + list_4x3_b
print(list_4x3_c)
- 数组广播运算特性
#Numpy广播运算特性——增加标量5
list_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[3,3,3]])
print(list_4x3_a + 5)
#不同形状的数组广播兼容,沿纵向延伸
list_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[3,3,3]])
list_4x3_b = np.array([1,1,1])
- 条件表达式选取数组元素
list_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[3,3,3]])
print(list_4x3_a[[True,True,False,False]])#输出[[1,1,1],[2,2,2]]
print(list_4x3_a < 2) #输出[[True,True,True],[False,False,False],[False,False,False],[False,False,False]]
- 高效处理性能对比
#
- 创建数组的函数
np.array()
np.ones() 创建元素为1的多维数组 #np.ones(shape(3,3),dtype=None,order='C') 形状,类型,订单=C行优先,F列优先
np.zeros() 创建元素为0的多维数组
np.full() 创建元素全为指定值的多维数组 #np.full(shape(3,3),fill_value=10) 三行三列数组,值全部为10
np.eye() 创建对角矩阵形式的二维数组 #np.eye(4,M=6)
np.linspace() 创建等差数列的一维数组,指定开始值,终值和步长
#np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
#start开始,stop终值,num指定元素,endpoint是否包含终值,retstep
np.arange() 创建等差数列的一维数组,指定开始值,终值和步长
随机多维数组
np.random.randint() 创建指定上下限范围的随机数组 #randint(low,high,size,dtype)
np.random.binomial() 创建符合二项分布的随机数组 #binomial(1,0.5,size=10)
np.random.normal() 创建符合指定正太分布 μ和 σ的随机数组
np.random.randn() 创建符合标准正态分布的随机数组 #randn(3,4) 3行4列
np.random.rand() 创建0-1之间均匀分布的随机数组(不包含1) #rand(3,4)3行4列
- 元素级处理函数
一元函数
np.abs()
np.exp()
np.sqrt()
np.square()
np.sign() #计算元素正负号(正1,0,负-1)
np.isnan() #指示元素是否为NaN np.array([1,1][-2,np.nan])队友([False,False][False,Frue])
二元函数
三元表达式
np.where() #x if condition else y 满足条件时输出x,不满足输出y
#array_2x2 = np.array([1,1][5,8]) np.where(array_2x2>5,5,0) 结果[[0,0][0,5]]
- 线性代数相关函数
矩阵matrix类型
np.array() #type <class'numpy.ndarray'>
np.mat(np.array()) #type <class'numpy.matrixilib.defmatrix.matrix'>
np.dot() #两点矩阵的点积
np.linalg.inv() #计算矩阵的乘法逆矩阵
np.linalg.solve() #求解线性矩阵方程
- Numpy的应用
例1:已知购物车中每个栏目商品的价格与件数,求总金额
随机生成2个购物栏目元组(栏目1范围随机数保留2位小数)(栏目2整数随机)
shopping1 = [round(random.uniform(10,20),2) for i in range(2)]
shopping2 = [random.randint(1,10) for i in range(2)]
如果用元组相加,需要写循环代码,效率低
def test(shopping1,shopping2):
sum=0
for i,j in zip(prize,num):
sum+=i+j
print(sum)
- 例1中使用Numpy进行高效的数组相加np.sum(),np.cumsum()
shp1 = np.array(shopping1)
shp2 = np.arrary(shopping2)
把列表变成Numpy类的对象,对数组相加shp1+shp2得到新数组,np.sum(shp1+shp2)求和
np.sum(shp1+shp2)
a=np.random.randint(1,9,size=9).reshape((3,3))#随机生成3X3的矩阵
print('a=',a)
print('每一行求和=',np.sum(a))#对所有元素相加
print('对每一行求累加和=,',np.cumsum(a))#每个元素不停累加
np.array()