NumPy学习笔记

    xiaoxiao2022-07-08  225

    1. 简介

    版本1.15.4

    NumPy是一个Python科学计算的基础包,包含了多维数组对象(multidemensional array object)和诸如矩阵等多种衍生对象,然后基于此进行数学计算、逻辑计算、维度改变、排序、筛选、输入输出、离散傅里叶变换、基础线性代数、基础统计操作、随机模拟等等一系列操作。

    NumPy和Python内置序列的区别
    NumPy中的数组在创建的时候长度是固定的,修改长度会新建数组、删除原有数组;NumPy数组中的元素必须属于同一类型,对象数组除外;NumPy数组帮助实现大量数据的高级数学计算和其他类型操作,并且执行的效率比Python内置序列要更高;越来越多的Python包都开始基于NumPy并且处理数据时都直接返回NumPy数组,所以掌握NumPy是非常有必要的

    2. ndarray

    NumPy的核心数据结构是一个包含同类型数据的多维数组ndarray,因为维度可能较高,所以常常使用一个包含正整数的元组进行索引,NumPy中维度又称“轴”(axis,复数是axes)

    属性解释ndarray.ndim返回ndarray的轴数ndarray.shape以元组的形式返回ndarray的维度ndarray.size返回ndarraty中元素的总数,相当于ndarray.shape中各个数字的乘积ndarray.dtype返回ndarray中元素的类型,常见的有numpy.int32, numpy.float32, numpy.float64ndarray.itemsize返回ndarray中元素所占的字节数ndarray.data不建议使用

    2.1 创建

    (1)直接将Python的列表或者元组(二者嵌套也可以)转换为多维数组;(适用于中小型数据的人工构建)

    (2)**使用NumPy初始化函数,**通过占位符内容来初始化ndarray。(偏向大型数据的自动构建)

    (3)从磁盘、标准格式、自定义格式中读取ndarray

    (4)从字符串或缓存中创建

    (5)使用特殊的库函数,比如random

    函数解释zeros(shape)/zeros_like()构建全0数组ones(shape)/ones_like()构建全1数组empty(shape)/empty_like()构建随机数组arange(a, b, c)类似Python中range()的构建方法,a,b,c分别代表起始值、终止值、步长/方向linspace(a, b, c)同上,只不过c不代表步长,而代表在a与b之间生成数字的个数random.random(shape)创建指定维度的随机数组,元素为0到1之间random.rand()(**待补充**)random.randn()(**待补充**)fromfunction()(**待补充**)fromfile()(**待补充**)

    2.2 元素级运算

    函数解释max(axis)/min(axis)统计最值sum(axis)求和np.exp(ndarray)计算自然指数np.sqrt(ndarray)计算平方根np.add(ndarray1, ndarray2)元素级数组相加,相当于ndarray1+ndarray2np.floor(ndarray)计算小于的最大整数np.ceil(ndarray)计算大于的最小整数

    2.3 更改维度

    函数名解释ndarray.ravel()将多维数组压成一个一维数组,并返回ndarray.reshape(shape)将ndarray调整为指定的维度并返回,reshape([3, 4])或者reshape(3, 4)都可以,如果是reshape(3, -1)则表示最后一个轴自动计算ndarray.resize(shape)原地方法,和reshape稍有不同ndarray.T矩阵的转置ndarray[:, newaxis]加一个轴,需要导入from numpy import newaxis

    2.4 连接

    函数名解释np.vstack((ndarray1, ndarray2))竖直堆积,对于二维数组等价于row_stack()np.hstack((ndarray1, ndarray2))水平堆积,对于二维数组等价于column_stack()np.c()沿着第二个轴将切片对象连接在一起np.r()沿着第一个轴将切片对象连接在一起

    2.5 分割

    函数名解释hsplit(ndarray, 3)将ndarray水平分割为三个大小相同的多维数组hsplit(ndarray, (3, 4))将ndarray水平分割为三个子数组,切割位置为第三列、第四列vsplit()依次类推

    2.6 复制与视图

    复制分为深复制和浅复制两种,由于NumPy中的==运算符会产生布尔数组,所以常用is来区分二者。

    NumPy中的深浅复制和其余语言不同,为了统一,在这里稍作修改:深复制得到的变量的值发生变化会引起原变量的值的变化,而浅复制则相反。

    (1)赋值操作不是复制

    执行了a = b那么a is b一定成立

    (2)view()和base

    ndarray的切片其实就是创建一个视图,而视图其实生成了一个新的数组对象,只不过在产生的过程中视图窗口中的数据保持不变,需要注意的是修改视图中的数据等价于修改原数据(修改视图的维度和数据类型除外)。

    (3)copy()实现浅复制

    copy()函数得到的是一个独立的数组对象副本,对此副本的所有操作,都将和原来数组无关。

    最新回复(0)