astype函数_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个字节

ab0a2f76a785dca7257fe76db9009cb9.png
.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表行方向

f3b91cc6c15f582d85882050aef0ddb8.png

-数组的维度变换

.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维数组。元素顺序,排完原数组第一行,开始第二行,类推

ea3f8bd54e703a54d201295b8f3b0bdc.png

-数组的类型变换

数据类型的转换 :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是给定种子值。给定随机数组种子后,随后使用randrandnrandint产生的随机数组不变。见截图

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是什么意思?只要是非负数就行

81b4173bf8b42ed117ad68799fc142b4.png

- 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列

cb9b6e05d5184a0c7b14b24f129a7232.png
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列...
多维数组时类似

bf4d3f1c640fa48700683efd61e9c1f2.png

- 图像的表示和变换

图像实际是一个二维数组,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) 得到的结果是不一样的。

2946a280a94380d84e20f23507a1aa7a.png
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值