注:本文章所有的内容整理都来源于imooc 夏正东老师讲述的《Numpy基础入门》
Numpy
Numpy
数组对象特点
用于存放同类型元素的集合
每个元组在内存中都有想用存储大小的区域
array()函数
我们可以通过使用array函数来创建一位数组
numpy.array(object)
其中,参数object类型可以是列表或者元组。
数组和类别的区别
数组只能保存相同的数据类型,而列表可以保存任何类型的数据
实例代码
import numpy as np
a = np.array([1,3,5,7])
print(a)
===>[1,3,5,7]
数组的数据类型
numpy指定数据类型
import numpy as np
a=np.array([1,3,5,7],dtype=np.int64) #指定数据类型
print(a,a.dtype) #查询数据类型
其他创建一维数组的函数
arange() 函数
我们可以使用arange()函数创建数值并返回数组对象
numpy.arange(start,stop,step,dtype)
start:开始值,默认值为0,包含开始值
stop:结束值,不包含结束值
step:步长,默认值为1,该值可以为负数
dtype:数组元素类型
linspace() 函数
我们可以使用linspace()函数创建等差数组
numpy.linspace(start,stop,num,endpoint,retstep,dtype)
num:设置生成的元素个数
endpoint:设置是否包含结束值,False是不包含,True是包含,默认值是True
retstep:设置是否返回步长(即公差),False是不返回默认值是False,True是返回,当值为True时,返回值是二元组,包括数组和步长
logspace()函数
我们可以用logspace()函数创建等比数组
numpy.logspace(start,stop,num,endpoint,base,dtype)
start:开始值,值为base**start
stop:结束值,值为base**stop
base:底数
二维数组
二维数组
array()函数
我们可以通过使用array函数来创建二维数组
numpy.array(object)
其中,参数object类型可以是列表或者元组。
例子
import numpy as np
a = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
print(a) ====>[[1 2 3]
[4 5 6]
[7 8 9]]
数组转置
我们可以使用数组对象的属性T,将数组进行转置
转置前:两行四列
转置后:四行两列
其他创建二维数组的函数
ones()函数
numpy.ones(shape,dtype=None)
shape:数组的形状 可以为列表也可以为元组
zeros()函数
根据指定的形状和数据类型生成全为0的数组
numpy.zeros(shape,dtype=None)
full()函数
根据指定的形状和数据类型生成数组,并用指定的数据进行填充
numpy.full(shape,fill_value,dtype=None)
fill_value:指定填充的数据
identity()函数
创建单位矩阵(即对角线元素为1,其他元素为0的矩阵)
numpy.identity(n,dtype=None)
n:数据形状
数组的访问
索引访问
一维数组的索引访问
array[]
二维数组的索引访问
array[][]
array[ , ]
切片访问
一维数组的切片访问
ndarray[ start:end ]
ndarray[ start: end :step ]
二维数组的切片访问
ndarray[ 所在0轴切片,所在1轴切片 ]
布尔索引
注意:布尔索引必须与要索引的数组形状相同,否则会引发IndexError错误。
布尔索引返回的新数组是原数组的副本,与原数组不共享相同的数据空间,即新数组的修改不会影响原数组,这是作为的深层复制
例子
import numpy as py
a1=np.array([1,2,3,4])
b1=np.array([True,False,True,False])
print(a1[b1])========>[1 3]
什么是花式索引
索引为整数列表
索引为一维整数数组
索引为二维整数数组
注意点:
花式索引返回的新数组与花式索引数组形状相同
花式索引返回的新数组与布尔索引类似,属于深层复制
二维数组上每一个轴的索引数组形状相同
例子
#一维数组的花式索引
import numpy as np
a1=np.array([1,2,3,4,5,6])
b = [1,2,3,4]
print(a1[b])
c = np.array([1,2,3,4])
print(a1[c])
d = np.array([[1,2],
[3,4]])
print(a1[d])
#二维数组的花式索引
a2 = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
m=[1,2]
n=[0,1]
print(a2[m,n])
#或者
print(a2[m][n])
数组的操作
连接数组
import numpy as np
concatenate()函数
该函数指沿指定的轴连接多个数组
numpy.concatenate((a1,a2,...),axis)
a1,a2 是要连接的数组。注意,除了指定轴外,其他轴元素个数必须相同。
axis 是沿指定轴的索引,默认为0轴。
例子
a = np.array([[1,2],
[3,4]])
b = np.array([[1,2]])
ab = np.concatenate((a,b))
#或者
#ab = np.concatenate((a,b),axis=0) 报错
# 因为0轴上的个数不相同
print(ab)
vstack()函数
沿垂直堆叠多个数组,相当于concatenate()函数axis=0的情况
numpy.vstack((a1,a2))
注意,1轴上元素个数相同
hstack()函数
沿水平堆叠多个数组,相当于concatenate()函数axis=1的情况
numpy.hstack((a1,a2))
注意,0轴上元素个数相同
分割数组
split()函数
该函数指沿指定的轴分割多个数组
numpy.split(ary,indices_or_sections,axis)
ary是要被分割的数组
indices_or_sections 是一个整数或数组,如果是整数就用该数平均分割;如果是数组,则为沿指定轴的切片操作
axis 指轴的分割方向,默认为0轴
vsplit()函数
该函数指沿垂直方向分割数组,相当于split()函数axis=0情况
numpy.vsplit(ary,indices_or_sections)
hsplit()函数
该函数指沿水平方向分割数组,相当于split()函数axis=1的情况
numpy.hsplit(ary,indices_or_sections)
数组的算数运算
例子
import numpy as np
a1 = np.array([1,2,3])
b1 = np.array([4,5,6])
print(a1+b1)
数组广播
数组与标量或者不同形状的数组进行算数运算的时候,就会发生数组广播
数组与标量
数组与标量进行算数运算,相当于先将标量广播成相同形状的数组,然后再进行算数运算
数组与数组
数组与不同形状的数组进行算数运算时,会发生广播,需遵守以下广播原则
(1)先比较形状,再比较维度,最后比较对应轴长度
(2)如果两个数组维度不相等,会在维度较低数组的形状左侧填充1,直到维度与高纬度数组相等
(3)如果两个数组维度相等时,要么对应轴的长度相同,要么其中一个轴长度为1,则兼容的数组可以广播,长度为1的轴会被扩展
数组的常用函数
随机数函数
rand()函数
该函数返回[0.0,1.0)的随机浮点数,即大于等于0.0,且小于1.0的随机浮点数
numpy.random.rand(d0,d1,...,dn)
d0,d1,…,dn表示数组的形状
randint()函数
该函数返回[low,high)的随机整数,如果high省略,则返回[0,low)的随机整数
numpy.random.randint(low,high,size,dtype)
size表示数组的形状
normal()函数
该函数返回正态分布随机数
numpy.random.normal(loc,scale,size)
loc表示平均值
scale表示标准差
randn()函数
该函数返回标准正态分布随机数,即平均数为0,标准差1的正太分布随机数
numpy.random.randn(d0,d1,...,dn)
排序函数
sort() 函数
按照轴对数组进行排序,即轴排序
numpy.sort(a,axis=-1,kind='quicksort',order=None)
a 表示要排序的数组
axis 表示排序的轴索引,默认是-1,表示最后一个轴
kind 表示排序类型。quicksort:快速排序,为默认值,速度最快;mergrsort:归并排序;heapsort:堆排序
order 表示排序字段
argsort()函数
按照轴对数组进行排序索引,即轴排序索引
numpy.argsort(a,axis=-1,kind='quicksort',order=None)
a 表示要排序的数组
axis 表示排序的轴索引,默认是-1,表示最后一个轴
kind 表示排序类型。quicksort:快速排序,为默认值,速度最快;mergrsort:归并排序;heapsort:堆排序
order 表示排序字段
聚合函数
求和
sum()函数
numpy.sum(a,axis=None)
nansum()函数
该函数忽略NaN
numpy.nansum(a,axis=None)
sum()方法
numpy.ndarray.sum(axis=None)
求最大值
amax()函数
numpy.amax(a,axis=None)
nanmax()函数
该函数忽略NaN
numpy.nanmax(a,axis=None)
max()方法
numpy.ndarray.max(axis=None)
求最小值
amin()函数
numpy.amin(a,axis=None)
nanmin()函数
numpy.nanmin(a,axis=None)
min方法
numpy.ndarray.min(axis=None)
求平均值
mean()函数
numpy.mean(a,axis=None)
nanmean()函数
numpy.nanmean(a,axis=None)
mean()方法
numpy.ndarray.mean(axis=None)
求加权平均值
average()函数
numpy.average(a,axis=None,weights=None)
weights 表示权重
数组的保存和读取
数据保存
save()函数
该函数可以将一个数组保存至后缀名为".npy"的二进制文件中
numpy.save(file,arr,allow_pickle=True,fix_imports=True)
file 表示文件名/文件路径
arr 表示要存储的数组
allow_pickle 为布尔值,表示是否允许pickle来保存数组对象
fix_imports 为布尔值,表示是否允许在Python2中读取Python3保存的数据
savez()函数
该函数可以将多个数组保存到未压缩的后缀名为".npz"的二进制文件中
numpy.savez(file)
savez_compressed()函数
该函数可以将多个数组保存到压缩的后缀名为".npz"的二进制文件中
numpy.savez_compressed(file)
数组的读取
load() 函数
读取".npy"和".npz"文件中的数组
numpy.load(file,mmap_mode,allow_pickle,fix_imports)
mmap_mode 表示内存在映射模式,即在读取较大的Numpy数组时的模式,默认情况时None