最近这几年,机器学习和深度学习大火。而这其中的数据计算是非常多,而这得益于python的numpy模块。多提一句:numpy是没有GIL(多线程解释器锁)的。所以,numpy中的计算是非常快的。那什么是GIL呢?请看python的多线程。话不多说,让我们开启今天的数学之旅。PS:numpy很多API,我还没有学完。我只是总结了一部分,后面会补充的。
通过array生成矩阵:
可以通过dtype设置矩阵数据的类型。astype可以修改数据类型。
通过asarray生成矩阵
用法和array一样。array和asarray都可将结构数据转换为ndarray类型。但是主要区别就是当数据源是ndarray时,
array仍会copy出一个副本,占用新的内存,但asarray不会。
其他生成矩阵的方式
numpy生成随机数:
seed的使用方法:
使用RandomState获得随机数生成器
>>>rdm=np.random.RandomState(2) # 2是随机数种子
>>>a=np.random.randint(0,20,(3,4))
>>>a
array([[ 8, 11, 1, 5],
[ 3, 8, 0, 18],
[ 5, 15, 8, 14]])
reshape&resize
可以通过reshape修改列表的行数和列数,resize改变数组的尺寸大小。根据reshape传入的参数判断转为哪种数组。
numpy运算
加、减、乘、除类似。如果两个矩阵形状相同,两个矩阵对应的元素做操作。若两个矩阵形状不相同,其中一个矩阵的维度与另一个矩阵的维度相同,可以在该维度上做操作。
通过axis求每行(列)的元素和或最大、最小值。0代表列,1代表行。
还可以获得最大、最小值:
其他一些计算
累加、累差、中位数、平均值
对clip函数的解释:小于5的元素都设为5,大于9的元素都设为9
flatten
对数组展开为一维数组
numpy的合并:
numpy的分割:
转置矩阵:
numpy.linspace
numpy.linspace(start,stop,num,endpoint,retstep,dtype)
该方法的作用是子啊start和stop之间产生num个线性向量。每个向量之间的距离是相同的。创建等差数列
start:起始点
stop:终止点
num : int, optional 默认50,生成start和stop之间50个等差间隔的元素
endpoint : bool, optional。If True, stop is the last sample. Otherwise, it is not included. Default is True。生成等差间隔的元素,但是不包含stop,即间隔为 (stop - start)/num
retstep : bool, optional。If True, return (samples, step), where step is the spacing between samples.返回一个(array,num)元组,array是结果数组,num是间隔大小
dtype : dtype, optional。The type of the output array. If dtype is not given, infer the data type from the other input arguments。输出数组的类型。如果没有给出dtype,则从其他输入参数推断数据类型。
numpy.newaxi:
插入新的维度
>>> import numpy as np
>>>b=np.array([1,2,3,4,5,6])
>>>b[np.newaxis]
>>>array([[1, 2, 3, 4, 5, 6]])
numpy.meshgrid:
生成网格点坐标矩阵
由上图,得知meshgrid的作用是:根据传入的两个一维数组参数生成两个数组元素的列表。如果第一个参数是xarray,维度是xdimesion,第二个参数是yarray,维度是ydimesion。那么生成的第一个二维数组是以xarray为行,共ydimesion行的向量;而第二个二维数组是以yarray的转置为列,共xdimesion列的向量
可能你看到这还不明白,看下图:
A,B,C,D,E,F是6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?答案如下:
这就是坐标矩阵——横坐标矩阵X中的每个元素,与纵坐标矩阵Y中对应位置元素,共同构成一个点的完整坐标。
numpy.logspace
创建等比数列,参数和logspace差不多,第四个参数代表基数。默认为10,如果想要修改其默认基数,输入第四个参数base,改变就可以了。