美文网首页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