美文网首页NumPy
一文学完NumPy

一文学完NumPy

作者: 大栗几 | 来源:发表于2019-10-14 09:54 被阅读0次

本文为原创文章,转载请注明出处
查看[深度学习]系列内容请点击:https://www.jianshu.com/nb/40219414

基础

Numpy的所有操作都是操作ndarray对象,ndarray是一个N维数组,下标从0开始。
【下面所说对矩阵和数组不做严格区分】

ndarray的构成

  • 一个指向数据存储地址的指针;
  • 数据类型dtype;
  • 表示数组形状的元组shape;
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

ndarray初始化

array = numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

object:原始矩阵;
dtype:数据类型,包含多种;
copy:意义未知;
order:创建数组的样式,C为行方向,F为列方向,A为任意方向;
subok:默认返回与object类型一致的数组;
ndmin:指定生成数组的最小维度,object维度不够则用空维度扩充

ndarray数据类型

常见数据类型

数据类型包含常见的整数、浮点数、字符串、复数等,常见的分别用如下字符串表示:

bool_、int_、intc、intp、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float_、float16、float32、float64、complex_、complex64、complex128

数据类型对象dtype

以上的常见数据类型都是内置的数据类型对象,即特殊的dtype对象,我们也可以自定义很多数据类型对象(如定义结构体类型等),具体用到的时候可以查阅相关资料。

ndarray属性

  • ndarray.ndim:秩,矩阵维度数量
  • ndarray.shape:矩阵的形状,每一维度的长度
  • ndarray.size:矩阵中元素总个数
  • ndarray.dtype:数据类型
  • ndarray.itemsize:每个元素占的字节数,每个元素的大小
  • ndarray.flags:内存信息
  • ndarray.real:数组元素的实部
  • ndarray.imag:数据元素的虚部
  • ndarray.data:包含矩阵直的缓冲区地址

Numpy创建矩阵

numpy.empty(shape, dtype = float, order = 'C')

shape为list或tuple,表示行列数等,dtype表示类型,order是计算机中元素存储的顺序(行优先或者列优先)。

初始化矩阵有以下几种方式:

  • numpy.empty():随机初始化,值随机;
  • numpy.zeros():值为0;
  • numpy.ones():值为1;
  • numpy.asarray(object,dtype=… ,order=…):值和形状都与object保持一致,(object转ndarray);
  • numpy.frombuffer():从buff接收流式数据;
  • numpy.fromiter():从可迭代对象获取数据;
  • numpy.arange(start,stop,step,dtype):从start(默认0)到stop(不包含stop),以步长step取值填充返回一维数组;
  • numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None):生成从start到stop的长度为num的等差数列,endpoint表示数列是否包含stop,retstep表示生成的数列中是否包含步长;
  • numpy.logspace(start,stop,num=50,ndpoint=True,base=10.0,dtype=None):生成从basestart到basestop,长度为num的等比数列。

Numpy切片和索引

切片

可以通过冒号:start:stop:step来切片,也可以通过slice(start,stop,step)来切片。

索引

  • 下标索引:如a[2];
  • 整数数组索引:a[[0,1,2],[0,1,0]] 表示获取分别获取a数组(0,0),(1,1),(2,0)位置的元素;
  • 布尔索引:a[a>5] 表示取a中大于5的元素,内外括号都必须是a;
  • 花式索引:a[[4,2,1,7]] 表示取a的4、2、1、7行;

Numpy不同大小数组运算广播

不同尺寸的矩阵进行运算(加减乘除)时,Numpy自动寻找可计算的维度,若都不可计算则报错。比如:

a=np.array([[0,0,0,0],[10,10,10,10]])
b=np.array([1,2,3,4])
c=np.array([[1],[2]])

则:a+b的值为:

array([[ 1, 2, 3, 4],
[11, 12, 13, 14]])

a+c的值为:

array([[ 1, 1, 1, 1],
[12, 12, 12, 12]])

Numpy数组操作

  • ndarray.reshape():修改数组形状,不改变数据,返回的新数组与原数组共用内存;
  • ndarray.flat:返回元素迭代器,迭代数组元素;
  • ndarray.flatten(order=’C’):元素重新组成一维数组,新数组与原数据不共用内存;
  • ndarray.ravel(order=’C’):元素重新组成一维数组,新数组与原数据共用内存;
  • ndarray.transpose(axes=None):axes为变换的维度,如axes=[1,0]表示将原来的第0维变换维第1维,第1维变换为第0维;
  • ndarray.T:矩阵转置;
  • ndarray.rollaxis():滚动变换(细节再再看);
  • ndarray.swapaxes(axis1,axis2):交换坐标轴;
  • numpy.expand_dims(arr,axis):在第axis维扩充一个维度;
  • numpy.squeeze(arr,axis):在axis维度删除一个维度(该维度只能有一条数据);

其他更多暂不介绍,用到再查。

Numpy字符串操作

  • numpy.char.add(a1,a2):依次连接a1和a2中的字符串,形成新数组;
  • numpy.char.multiply(s,n):将s重复n次;
  • numpy.char.center(s,n,fillchar=’*’):s居中,若len(s)小于n则使用fillchar填充两边;
  • numpy.char.capitalize(s):s首字母转大写;
  • numpy.char.title(s):s中每个词首字母都转大写;
  • numpy.char.lower/upper/split/splitlines/join/strip/replace/encode/decode:不在赘述。

Numpy数学函数

  • numpy.pi:圆周率;
  • numpy.sin(a)/cos(a)/tan(a)/cot(a)/arcsin(a)/arccos(a)/arctan(a)等计算三角函数;
  • numpy.around(a,decimals):a数组中的元素四舍五入,decimals表示保留小数位数;
  • np.floor(a)/ceil(a):a数组元素向下/向上取整;

Numpy算数函数

  • numpy.add(a1,a2)/subtract(a1,a2)/multiply(a1,a2)/divide(a1,a2):a1和a2中对应项相加/相减/相乘/相除;
  • numpy.reciprocal(a):a中对应元素取倒数;
  • numpy.power(a,b)/mod(a,b):计算a中数组元素对应的b中元素的幂/余数;

Numpy统计函数

  • numpy.amin(a,n)/amax(a,n):在第n维度上计算a的最小值/最大值;
  • numpy.ptp(a,axis=n):在第n维度上分别计算a中最大值与最小值的差异;
  • numpy.percentile(a,q,axis):在a的第axis维计算q百分位数,0<=q<=100;
  • numpy.median(a,axis)/mean(a,axis):在a的第axis维计算a的中位数/平均值;
  • numpy.average(a,axis,weights,returned=True):计算a的加权平均值,weights为权值;
  • numpy.std(a)/var(a):计算a的标准差/方差。

Numpy排序、条件筛选

  • numpy.sort(a,axis,kind,order):kind默认为快速排序,order表示要排序的字段(如果有字段的话),axis表示要排序的维度;
  • numpy.argsort(a):返回数组值从小到大的索引值;
  • numpy.lexsort():多序列排序;
  • numpy.msort(a):按照第一个轴排序;
  • numpy.sort_complex():复数排序;
  • numpy.partition/argpartition:排序并分区;
  • numpy.argmax(a,axis)/argmin(a,axis):给定维度的最大值最小值索引;
  • numpy.nonzero(a):非0数据索引;
  • numpy.where(x>3):满足条件的元素索引;
  • numpy.extract(condition,a):返回a中满足条件condition的元素索引。

Numpy视图、拷贝

  • b=a:无拷贝,b是a的一个引用,二者等价;
  • b=a.view():浅拷贝,改变b的形状不会对a有影响,但二者的数据指向相同的内存单元;
  • b=a[3:] 切片:也是浅拷贝;
  • b=a.copy():深拷贝。

Numpy矩阵库

Numpy包含了一个矩阵库:numpy.matlib,可以返回多种矩阵如单位矩阵等。

Numpy线性代数

  • numpy.dot(a,b):a和b矩阵点积;
  • numpy.vdot(a,b):a和b向量点积;
  • numpy.inner(a,b):a和b向量内积;
  • numpy.matmul(a,b):会广播的矩阵点积;
  • numpy.linalg.det(a):计算a的行列式;
  • numpy.linalg.solve(a):计算矩阵方程解;
  • numpy.linalg.inv(a):计算矩阵a的逆矩阵。

Numpy绘图

使用Matplotlib库绘图。

相关文章

网友评论

    本文标题:一文学完NumPy

    本文链接:https://www.haomeiwen.com/subject/fcblmctx.html