>

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()
posted @ 2020-11-05 11:45  仕杰资本  阅读(124)  评论(0)    收藏  举报
>