Python—Numpy常用库函数

1.numpy

1.1numpy简介

NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。简单来说numpy可以完成数组从建立,修改,检索,运算等一系列操作

1.2Numpy库方法

  • 此处都为 import numpy as np

生成数组 array

array用法:数组和列表有所不同,我们需要将列表转换为数组才能使用数组相关的函数,创造数组时,根据元素类型,会自适应选择int,float还是其他类型

格式:

方法1:np.array(list1,dtype='')      

	list1为列表元素,只能写一个列表,如果为2个列表,需要在外面加上[],进行下述步骤都需要这一步,dtype表示初始数组类型

查行列数 shape

用法:shape可以查看数组的行列数,有一种特殊的(n,)为可行可列元素

格式:

方法1:np.shape(a)

	a为数组,一位会显示(n,),除非生数组时在list一层列表外再套一层[],在生成的就是(1,n)

方法2:a.shape

全生成零 zeros

用法:> 直接生成一个数组,且元素全为0数组,生成的为float64元素,可通过dtype关键字来修改输出类型(eg:dtype=’int32’)

格式:

方法1:np.zeros(n) 生成n*1的(n,)元素全为0数组

方法2:np.zeros((n,m))生成(n,m)的全为0数组

全生成一 ones

用法:直接生成一个数组,且元素全为1数组,生成的为float64元素

格式:

方法1:np.ones(n) 生成n*1的(n,)元素全为1数组

方法2:np.ones((n,m,dtype=''))生成(n,m)的全为1数组

全填充数 fill

用法:我们发现有数组元素全为0或者数组元素全为1,那后面的我们也想2,3,4…显然是不科学的,因此使用fill来满足,不同于上述ones,zeros,此处fill需要先创建一个数组才能对其修改,如果希望修改dtype,可以使用astype对原数组a进行修改

格式:

方法1:a.fill(value: int | float | complex)

a为数组,value填写数字,表示将a数组的数据修改为value值,注意的是fill默认的输出类型是随a改变的,a为int型,即使输入float也会变为int

类型强转 astype

用法:将数组类型转变为设定的类型,不是对原数组进行修改的_______后续我们会发现,对于元素本身修改的函数并不多

格式:

方法1:b=a.astype('数据类型')

a为数组,将其复制一份返回转变为数据类型给b

整数序列 arange

用法:生成整数的序列,可以设置步长step

格式:

方法1:np.arange(n,m,step=k)

左闭右开,生成从n到m-1的序列,步长为k

元素类型 dtype

用法:获取数组的元素类型

格式:

方法1:a.dtype

获取a数组中元素的类型

等差数列 linspace

用法: 不同在于其是左闭右闭,为[],生成一串间隔相同的等差数列

格式:

方法1:np.linspace(n,m,k)

从n到m分为k-1份,之后取节点,节点的取值方法是从n开始取的,m结束,因此n,m一定会被取到,这里k的含义应该是k个等差数列的数

生随机数 rand

用法:生成随机0-1的整数,返回数组格式

格式:

方法1:np.random.rand(n)

生成含有n个数的0-1一维数组

方法2:np.random.rand(n,m)

生成n*m数组的0-1的二维数组

整数随机 randint

用法:生成指定范围的整数数组,左闭右开

格式:

方法1:np.random.randint(n,m,i)

生成i个n到m-1之间的随机整数作为一维数组

方法2:np.random.randint(n,m,(i,j))

生成(i,j)个n到m-1之间的随机整数作为二维数组

元素个数 size

用法: 查看数组中的元素个数

格式:

方法1:np.size(a)

获取a中的元素,a即使为列表/元组也可以获取

方法2:a.size

只有当a为数组时,才可以使用此方法,用于获取数组中的元素个数

查看维数 ndim

用法:查看数组的维数

格式:

方法1:np.ndim(a) 

方法2:a.ndim

一维索切 a[m]

用法: a为一个数组m个元素,索引数组中的一个或者多个元素,复制a中的元素,而不是获取他的地址位置,切片是复制其元素地址位置

格式:

方法1:a[i]

一维数组只能索引一个获取a中的i位置的元素,从0开始计数,支持负索引,复制

方法2:a[i:j]

此时相当于对于a进行切片,从i到j-1(左闭右开0)从0开始,支持负切片,切片不是复制,而是获取地址,因此改变数据,原数组也会改变

方法3:np.where(a>m)

a为数组,返回a中数组元素大于m的位置,从0开始计位置.

二维索切 a[m,n]

用法:a为二维数组,m行n列,索引数组中的一个或者多个元素,复制a中的元素,而不是获取他的地址位置,切片是复制其元素地址位置

格式:

方法1:a[(i1,j1),(i2,j2),...]

索引a中多个对应行列数据元素

方法2:a[i] a[i,] a[:,j]

第一个第二个默认切片i行,第三个默认索引j列 :不能省去

方法3:a[i1:i2,j1:j2]

表示切片i1到i2行,j1到j2列的元素,i1,i2,j1,j2省略,表示从开始计算,或者到达结尾

方法4:a[b]

b为bool型数组(0为False,其他为True),b为一维数组是,表示切片为True的行,b同为二维时表示索引a中单个为True位置的元素,并返回一维数组

方法5:a[(i1,i2,i3,i4,...),(jn,j2,j3,j4,...)]

花式索引,表示同时索引(i1,jn)(i2,j2)(i3,j3)(i4,j4)(ix,jy)的元素*奇怪

方法5:np.where(a>2)

返回a二维数组中的元素位置,表示方式特殊下实例,第一行为行,第二行为列,一一对应,返回的为元组,用处极大,当对应属性有其他属性时,就很方便

a=np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,4,4,4]])
np.where(a>3)
>>>(array([0, 1, 1, 2, 2, 2, 3, 3, 3, 3], dtype=int64),#行位置[一一对应,eg(0,3),(1,2)多是大于3的元素]
>>> array([3, 2, 3, 1, 2, 3, 0, 1, 2, 3], dtype=int64))#列位置

伪转类型 asarray

用法:将数组或者列表元素复制一份并可以对其类型进行转换,返回为数组类型,算是array的进阶版,因为可以转数组

格式:

方法1:np.asarray(a,dtype='')

将a数组或者列表复制一份,返回转换为dtype类型的数组,不修改原数组

数组排序 sort

用法:将a数组进行排序,不论是二维数组还是一维数组,都只对其行内进行排序,而非整体

格式:

方法1:np.sort(a)

排序索引 argsort

用法:sort排序的大小按照大小顺序返回对应元素在原数组中的位置,原数组从0开始

格式:

方法1:np.argsort(a)

只对一维数组生效,即使是二维也只对每一行进行排序

案例:

a=np.array([[3,2,8,4]])
order=np.argsort(a)
>>>1,0,3,2,对应大小
a[order[0]]
>>>获取最小的元素2

数组求和 sum

用法:求数组中元素的总和

格式:

方法1:a.sum()

方法2:np.sum(a)

求最大值 max

用法:求数组中元素的最大值

格式:

方法1:a.max()

方法2:np.max(a)

求最小值 min

用法:求数组中元素的最小值

格式:

方法1:a.min()

方法2:np.min(a)

求均值 mean

用法:求数组中元素的平均值

格式:

方法1:a.mean()

方法2:np.mean(a)

求标准差 std

用法:求数组中元素的标准差

格式:

方法1:a.std()

方法2:np.std(a)

相关系数 cov

用法:求数组a,b的相关系数

格式:

方法1:np.cov(a,b)

变行列数 shape

用法:一个数组我们希望其中元素根据我们希望的行列数进行排列,就使用shape,之前是查询用法,这里是修改,对原数组修改**

格式:

方法1:a.shape=(n,m) a.shape=n,m

a需要为n*m个数组元素,转变为n行m列的数组,可以无括号,修改时发现a为2维时,修改,元组的方式顺序是一行一行的元素转变

案例:

a=np.array([[1,2,3,4,5,6]])
a.shape=2,3
a
>>>
1,2,3
4,5,6
a.shape=3,2
a
>>>
1,2,3
4,5,6

数组转置 transpose

用法:将数组进行转置,但都不会替换a

格式:

方法1:a.T

方法2:a.transpose() np.transpose(a)

数组连接 concatente

用法:将不同数组连接起来,但需要行拓展(列拼接)时需要列相同,列拓展(行拼接)时需要行相同

格式:

方法1:np.concatenate((a0,a1),axis=)

a0,a1为向量,axis表示拼接方向,默认为0表示行拓展(列拼接),需要保证列数相同;1表示列拓展(行拼接),需要保证行数相同

数组拼接 ~task

用法:numpy有三个函数可以直接实现拼接

格式:

方法1:np.vstack((a0,a1))#列拼接

方法2:np.hstack((a0,a1))#行拼接

方法3:np.dstack((a0,a1))#维度拼接

案例:

a0=np.array([[1,2,3,4],[2,3,4,5]])
a1=np.array([[1,2,3,4],[2,3,4,5]])
np.vstack((a0,a1))#列拼接
>>>
1,2,3,4
2,3,4,5
1,2,3,4
2,3,4,5
np.hstack((a0,a1))#行拼接
>>>
1,2,3,4,1,2,3,4
2,3,4,5,2,3,4,5
np.dstack((a0,a1))#加维度拼接
>>>
array([[[1, 1],
        [2, 2],
        [3, 3],
        [4, 4]],

       [[2, 2],
        [3, 3],
        [4, 4],
        [5, 5]]])

求绝对值 abs

用法:将数组中的每个元素变为绝对值后的元素

格式:

方法1:np.abs(a)

方法2:a.__abs__()#绝对值

a为数组

求解指数 exp

用法:将数组中的每个元素k变为e为底数的k次幂(e (k))

格式:

方法1:np.exp(a)

求解中值 median

用法:求解数组元素的中值

格式:

方法1:np.median(a)

求累加和 cumsum

用法:新生成的数组a1[n]=a[0]+a[1]+…+a[n]或者表示为a1[n]=a1[n-1]+a[n],a1[0]=a[0],生成的新数组不会覆盖原数组

格式:

方法1:np.cumsum(a)

#1.3数组类型

基本类型 可用的Numpy类型 备注
布尔型 bool 占一个字节
整型 int8,int16,int32,int64,int128,int int和C语言中long一样长
无符号整型 uint8,uint16,uint32,uint64,uint128,uint uint和C语言中unsigned long一样长
浮点数 float16,float32,float64,float128,float 默认双精度float64,longfloat精度大小与系统有关
复数 complex64,complex128,complex,longcomplex 默认为complex128,即实部虚部都为双精度
字符串 string,unicode 可以使用dtype=S4表示一个四字节字符串的数组
对象 object 数组中可以使用任意值
时间 datetime,timedelta64

1.4注意事项

  • 一般通过array生成的一维数组格式为(n,)格式,则说明此数组可以当行向量使用,也可以当列向量使用,如果能相乘得到的也是(n,)向量
  • 除了a.shape(n,m)会使得a的数组发生变化,其他数组基本上都是复制一份a进行修改,a不发生变化,(a为一个含有n*m个元素的数组)
  • 列表与数组的运算有极大地不同,列表之间相加相当于append,无法相减;数组相加减就是对应行列元素相加减,数组相乘使用@
  • np.方法(数组) 与 数组.方法的区别在于前者不一定要是数组也可以执行并得到正确的结果,后者在于需要声明自己是数组类型,才可以使用数组类中的方法和类属性


个人笔记,可能存在错误,希望各位批评指正!!!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhong_Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值