python库函数索引_Python库收录——数值计算numpy库常用函数(含注释)

这里对Numpy库常用的函数进行总结。详细的函数内容可以查阅。Numpy是科学计算库,是一个强大的N维数组对象ndarray,是广播功能函数。其整合C/C++.fortran代码的工具 ,更是Scipy、Pandas等的基础

————————————————

注意,基本所有语句都可以使用两种写法,如下面的例子

# dot()函数可以通过numpy库调用,也可以由数组实例对象进行调用

a.dot(b) 与 numpy.dot(a,b) #a,b是数组(矩阵)

b=a.reshape(shape) 与 b=np.reshape(a,shape)

b=a.resize(shape) 与 b=np.resize(a,shape)

#如b=a.reshape((3,2)) 与 b=np.reshape(a,(3,2))

另外,习惯上, 数组元素编号、行列编号都是从0开始的。如一维数组有n个元素,元素编号为0到n-1;如三维数组有3层4行5列,(0,1,3)表示第1层第2行第4列的元素。

三维数组维度顺序为(层数、行、列),代号表示为0,1,2, 即z,y,x,即深度、高度、宽度。

-数组信息查询

.ndim :维度。说白了就是[]括号的层数

.shape :各维度的尺度,注意(x,y)表x行y列,(x,1)表x行1列,(y,)表1行y列。

不知道为什么1行时这么特殊,不把1写出来。看下面截图例子

.size :元素的个数。与元素位于第几层[]无关,表所有独立的元素的总数

.dtype :元素的类型 dtype(‘int32’)

.itemsize :每个元素的大小,以字节为单位 ,每个元素占4个字节.shape 表各维度的尺度,注意(x,y)表x行y列,(x,1)表x行1列,(y,)表1行y列。

-ndarray数组的创建

np.arange(m,n) ; 1行n-m列数组,元素从m到n-1

np.arange(n)或np.arange(n,); 1行n列数组,元素从0到n-1.即不输入m,则默认m=0

np.ones((m,n)): m行n列数组,元素全为1

np.ones((n))或np.ones((n,))

np.ones(n)或np.ones(n,): 1行n列数组,元素全为1.即不输入m则默认m=1

np.zeros((m,n),dtype = np.int32): 生成int32型的全0,dtype参数可加可不加,上面几个语句也是一样

np.zeros((n,))或np.zeros(n,)或np.zeros((n))或np.zeros(n) 默认m=1,1行n列数组

注意np.zeros(m,n)会报错,np.zeros(shape)参数shape必须是坐标形式(x,y),带括号

np.full(shape, val): 参数shape是坐标形式(x,y),元素全为val.若不输入x则默认x=1

np.eye(n) : 生成单位矩阵,默认m=n

np.eye(m,n) : 生成类似单位矩阵,多余的行或列全为0.参见下面截图

np.ones_like(a) : 按数组a的形状生成全1的数组

np.zeros_like(a): 同理

np.full_like (a, val) : 同理

np.linspace(m,n,x) : 闭区间[m,n]内,等间距生成1行x列数组,包含m和n

np.linspace(m,n,x, endpoint = False) : 半开区间[m,n)内,等间距生成1行x列数组,包含m,不含n

注意endpoint=False表示n不含在内,实际上是m到n,取x+1个点中间夹x段,只取前x个点.

注意没有endpoint=Ture。只有False参数

np.concatenate((a1, a2, ...), axis) :将若干数组沿行方向或列方向连接起来

a1, a2, ...是相同类型的数组,axis连接数组所沿的轴,默认为 0。axis=0表列方向,axis=1表行方向

-数组的维度变换

.reshape(shape) : 不改变数组元素,根据shape重新组织行列。如1行4列reshape为2行2列、4行1列。3行2列等不合理的,会报错

注意,三维数组维度顺序为0,1,2,即z,y,x,即深度、高度、宽度,即层数、行、列

a = np.arange(24).reshape((3,4,2)),表3层4行2列

.resize(shape) : 改变当前数组,依shape生成。resize功能>=reshape

如1行4列resize为2行2列、4行1列,则实际等同于reshape。

resize为3行2列,多出来的位置则会用已有的元素(按照顺序)填充。见截图

.swapaxes(ax1,ax2) : 将两个维度调换。若数组有n维,则ax1,ax2可取0,1,2...n-1.高维情况换轴还是很抽象的。见截图

.flatten() : 对数组进行降维,保留全部元素降成1维数组。元素顺序,排完原数组第一行,开始第二行,类推

-数组的类型变换

数据类型的转换 :a.astype(new_type) : eg, a.astype (np.float), a.astype(float)也是对的

数组向列表的转换: a.tolist() 注意[]层数不会改变,例如三维数组变成列表后,[]依然保留,只不过没有数组行列形式了

-数组的索引和切片

一维数组索引

a = np.array([9, 8, 7, 6, 5, ]) 一维数组有n个元素,元素编号为0到n-1

a[0]=9, a[1]=8

一维数组切片

a = np.array([9, 8, 7, 6, 5, ])

a[1:4:2] = array([8, 6]) : a[起始编号:终止编号(不含): 步长]

a[::2] = array([9, 7, 5]) 缺省时,表示从第0个元素开始,到最后一个元素

a[::1] = array([9, 8, 7, 6, 5])

- 多维数组索引

a = np.arange(24).reshape((2, 3, 4))

a[1, 2, 3] 表示3个维度上的编号,即第2层第3行第4列的元素。编号从0开始

- 多维数组切片

a [:,:,::2 ] 缺省时,表从第0个元素开始,到最后一个元素.注意比较一维数组切片的关联。这里列切片2个冒号

-数组的运算

np.abs(a) 和 np.fabs(a) : 取各元素的绝对值 .fabs()取绝对值并使成为float类型

np.sqrt(a) : 计算各元素的平方根

np.square(a): 计算各元素的平方

np.log(a) np.log10(a) np.log2(a) : 计算各元素的自然对数、10、2为底的对数

np.ceil(a) np.floor(a) : 计算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整)

np.rint(a) : 各元素 四舍五入。对于负数元素,先取其绝对值进行四舍五入,然后再加负号。如-1.5变成-2,-1.4变成-1

例如np.rint(np.array([-1.5,1.5,-4.4]))=array([-2.,2.,-4.])

np.modf(a) : 将数组各元素的小数和整数部分以两个独立数组形式返回

np.exp(a) : 计算各元素的指数值

np.sign(a) : 计算各元素的符号值 1(+),0,-1(-)

np.maximum(a, b) np.fmax() :a,b数组具有相同的形式,一一比较相应位置处的元素取大者. fmax()取最大值并使成为float类

np.minimum(a, b) np.fmin() : 同上,取最小值。a,b形式不同,则会报错

如例,a=[1,2,-1],b=[0,3,-2],则np.maximum(a, b)=[1,3,-1],np.minimum(a, b)=[0,2,-2]

np.mod(a, b) : 元素级的模运算

np.copysign(a, b) : 将b中各元素的符号赋值给数组a的对应元素

- NumPy IO 数据存取于文件。

主要是np.savetxt()和np.loadtxt()、numpy.save()和numpy.load()、numpy.savez()和numpy.load()、array.tofile()和np.fromfile()

np.savetxt(FILENAME, array, fmt="%d", delimiter=",")

np.loadtxt(FILENAME, dtype=int, delimiter=' ')

savetxt(),只能存储一维和二维数组.存储三维及以上则会报错。

savetxt() 函数将数据以文本形式存储到txt文件中

fmt表示元素的格式如 %d, %.2f, %.18e

delimiter指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。默认是空格

实例1:

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

np.savetxt('out.txt',a)

b = np.loadtxt('out.txt')

实例2:

a=np.arange(0,10,0.5).reshape(4,-1)

np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 改为保存为整数,以逗号分隔

b = np.loadtxt("out.txt",delimiter=",") # load 时也要指定为逗号分隔

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

numpy.load('outfile.npy')

numpy.save() 函数一次保存一个数组到.npy文件中

file是要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上。

allow_pickle: 可选,布尔值,允许使用 Python pickles 保存对象数组,Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化。

fix_imports: 可选,为了方便 Pyhton2 中读取 Python3 保存的数据

实例:

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

# 保存到 outfile.npy 文件上

np.save('outfile.npy',a)

# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上

np.save('outfile2',a)

b = np.load('outfile.npy')

numpy.savez(file, *args, **kwds)

numpy.load("runoob.npz")

numpy.savez() 函数一次可以保存多个数组到.npz文件中

file:要保存的文件,扩展名为 .npz,如果文件路径末尾没有扩展名 .npz,该扩展名会被自动加上。

args: 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1, …

kwds: 要保存的数组使用关键字名称

实例:

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

b = np.arange(0, 1.0, 0.1)

c = np.sin(b)

# c 使用了关键字参数 sin_array

np.savez("runoob.npz", a, b, sin_array = c)

r = np.load("runoob.npz")

print(r.files) # 查看各个数组名称

print(r["arr_0"]) # 数组 a

print(r["arr_1"]) # 数组 b

print(r["sin_array"]) # 数组 c

a.tofile(frame, sep=’’, format=’%s’ ) ##注意没有numpy.tofile(),这个写法报错

np.fromfile(frame, dtype = float, count=-1, sep=’’)

用于多维数据的存取,a.tofile() 和np.fromfile()要配合使用,要知道数据的类型和维度。

frame:文件、字符串;dtype:读取的数据以此类型存储;

count:读入元素个数,-1表示读入整个文件; sep: 数据分割字符串,如果是空串,写入文件为二进制

format:: 写入数据的格式

实例:

a = np.arange(100).reshape(5, 10, 2)

a.tofile(“b.dat”, sep=”,”, format='%d')

np.fromfile(“b.dat”)

- numpy随机数函数

numpy 的random子库,注意numpy.random子库和独立的random库不是同一个库。二者有差别,numpy.random子库主要产生随机数作为多维数组的元素,而random独立库单纯产生随机数,因此二者尽管有很多同名的随机数产生方式,但numpy.random一般会多一个shape数组维度参数

np.random.*

np.random.rand(d0, d1, …,dn) d0到dn指定各维度结构,如rand(3,4,5)表3层4行5列三维数组。

各元素是[0, 1)的浮点数,服从均匀分布

np.random.randn(d0, d1, …,dn) d0到dn含义同上。元素服从标准正态分布

np.random.randint()

randint(low,high,shape): 依shape创建随机整数或整数数组,范围是[low, high).如randint(1,10,(2,3,4))

seed(s) :随机数种子,s是给定种子值。给定随机数组种子后,随后使用rand\randn\randint产生的随机数组不变。见截图

shuffle(a) : 根据数组a的第一轴进行随机排列,改变数组a。随意调换两轴,作用结果就是改变了的数组a

permutation(a) : 根据数组a的第一轴进行随机排列, 随意调换两轴,但是不改变原数组a,将生成新数组

choice(a[, size, replace, p]) : 从一维数组a中以概率p抽取元素, 形成size形状新数组,replace表示是否可以重用元素,缺省值为True。

实例:

b=np.random.randint(100,200,(8,))

np.random.choice(b,(3,2)) #会有重复的元素

np.random.choice(b,(3,2),replace=False) #没有重复的元素

np.random.choice(b,(3,2),p=b/np.sum(b)) #p是出现几率,与数字大小成正比

np.random.uniform(low,high,shape) ##在上下限间,产生均匀分布的数组

np.random.normal(avr,scale,shape) ##avr均值,scale标准差,产生正太分布的数组

np.random.poisson(lam,shape) ##lam随机事件发生率,产生具有泊松分布的数组。

这个lam是什么意思?只要是非负数就行

- numpy的统计函数

sum(a, axis = None) : 依给定轴axis计算数组a相关元素之和,axis为整数或者元组

mean(a, axis = None) : 同理,计算平均值

average(a, axis =None, weights=None) : 依给定轴axis计算数组a相关元素的加权平均值

std(a, axis = None) :同理,计算标准差

var(a, axis = None): 计算方差

#注意,以上axis参数可选0,1,2表示分别在相应方向上操作。如果不填,则表示对数组中全部元素操作

实例:

np.mean(a, axis =1) : 对数组a的行维度的数据进行求平均(注意,是固定第几列,求第1、2、3...行的平均)

a = np.arange(12).reshape(2,3,2)

np.average(a, axis=1, weights =[10, 5, 1]) : 对a数组 行维度加权求平均,weights为权重系数,分别对应求第1、2、3行

min(a) max(a) : 计算数组a的最小元素值和最大元素值

ptp(a) : 计算数组a最大值和最小值的差

median(a) : 计算数组a中元素的中位数(中值)

argmin(a) argmax(a) : 计算数组a的最小、最大值的下标(注意:返回值是假想将多维数组解折叠为一维数组时的下标)

unravel_index(index, a.shape) : 输入a.shape和一维下标index,找到相应元素的实际多维下标(不需要假想为一维)

实例:

a = [[15, 14, 13],

[12, 11, 10] ]

np.argmax(a) = 0 #最大值为假想的一维数组中的第一个元素

np.unravel_index( np.argmax(a), a.shape) = (0,0) #最大值在实际数组的坐标为第1行第1列np.average(a, axis=1, weights =[10, 5, 1])和np.mean(a, axis =1)

- numpy的梯度函数

np.gradient(a) : 计算数组a中元素的梯度,f为多维时,返回每个维度的梯度

离散梯度计算: 三个数a, b, c 其中a的梯度是(b-a)/1, b的梯度是(c-a)/2,而c的梯度是(c-b)/1

当为二维数组时,np.gradient(a) 得出两个数组.

第一个数组由依次两行的相应元素相减得到,如第2行减第1行,第3行减第2行...

第二个数组由依次两列的相应元素相减得到,如第2列减第1列,第3列减第2列...

多维数组时类似

- 图像的表示和变换

图像实际是一个二维数组,numpy结合python PIL(python image library)库常使用与图像处理

from PIL import Image

# Image是PIL库中代表一个图像的类(对象)

im = np.array(Image.open(“.jpg”))

im = Image.fromarray(b.astype(‘uint8’)) # 生成

im.save(“路径.jpg”) # 保存

im = np.array(Image.open(“.jpg”).convert('L'))

# convert(‘L’)表示转为灰度图

————————————————

-数组的运算

numpy.dot()函数用于数组相乘

基本用法和matlab类似

使用dot()函数的写法,有两种:dot()函数可以通过numpy库调用,也可以由数组实例对象进行调用

a.dot(b) 与 numpy.dot(a,b) #a,b是数组(矩阵)

dot()返回的是两个数组的点积(dot product)

1. 若a和b是一维数组,则得到的是两数组的內积(inner product)

2. 若a和b是二维数组(矩阵)之间的运算,则得到的是矩阵积(mastrix product)

实例见截图

此外,矩阵积计算不遵循交换律, np.dot(a,b) 和 np.dot(b,a) 得到的结果是不一样的。

你可能感兴趣的:(python库函数索引)