美文网首页我爱编程
Python学习笔记:NumPy

Python学习笔记:NumPy

作者: 黑人不是牙膏 | 来源:发表于2017-02-22 21:42 被阅读0次

    什么是NumPy?

    NumPy is the fundamental package for scientific computing with Python. It contains among other things:

    • a powerful N-dimensional array object
    • sophisticated (broadcasting) functions
    • tools for integrating C/C++ and Fortran code
    • useful linear algebra, Fourier transform, and random number capabilities

    以上是NumPy官网给的定义,翻译如下:
    NumPy是用Python进行科学计算的基础包,它包含一下内容:

    1. 一个强大的N维数组对象Array
    2. 复杂而精确的函数库
    3. 集成了C/C++和Fortran代码的工具
    4. 有用的线性代数、傅立叶变换和随机数生成函数

    简而言之,numpy模块为Python提供了N维数组运算的支持,它可以支持高维度的数组和矩阵运算并且提供了大量的数学函数库。

    创建数组

    Function Description
    np.array 把 list, tuple, array, 或者其他的序列模式的数据转换为 ndarray, 默认创建一个新的ndarray,可以推断出dtype,也可以显式指定dtype
    np.asarray 把其他类型的数据转换成为ndarray, 如果是ndarray 输入则默认不进行 copy, 而如果是其他类型数据则创建新的ndarray
    np.arange 类似于内置的range 函数, 创建一个序列,但返回的是ndarray,而不是列表
    np.ones,np.ones_like 根据指定的形状和dtype创建一个全1数组,ones_like以另一个数组为参考,并根据其形状和dtype创建一个全1数组
    np.zeros,np.zeros_like 类似于np.ones
    np.empty,np.empty_like 创建空数组, 类似于np.ones,只分配内存空间但不填充任何值
    eye 创建对角线为1其余为0的矩阵
    identity 创建对角线为1其余为0的方阵

    代码示例:

    >>> import numpy as np
    
    >>> d = [2, 4, 3, 1, 6, 6]
    >>> a = np.array(d)
    >>> a
    array([2, 4, 3, 1, 6, 6])
    >>> type(a)
    <type 'numpy.ndarray'>
    >>> d2 = [[2, 4], [3, 1], [6, 6]]
    >>> a2 = np.array(d2)
    >>> a2
    array([[2, 4],
           [3, 1],
           [6, 6]])
    
    >>> a3 = np.asarray(a2)
    >>> a3 is a2
    True
    >>> d1 = d
    >>> d1
    [2, 4, 3, 1, 6, 6]
    >>> a4 = np.asarray(d1)
    >>> a4
    array([2, 4, 3, 1, 6, 6])
    >>> a4 is d1
    False
    
    >>> np.ones(2)
    array([ 1.,  1.])
    >>> np.ones((2,3))
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    >>> np.ones_like(a3)
    array([[1, 1],
           [1, 1],
           [1, 1]])
    >>> np.ones_like(a2)
    array([[1, 1],
           [1, 1],
           [1, 1]])
    
    >>> np.eye(2)
    array([[ 1.,  0.],
           [ 0.,  1.]])
    >>> np.eye(2,3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.]])
    >>> np.identity(3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])
    

    属性

    Attributes Description
    np.size ndarray 的属性, ndarray 的元素的数量.
    np.dtype ndarray 的属性, ndarray 的元素的类型, 和 C/C++ 中的类型有对应关系.
    np.itemsize ndarray 的属性, 元素的字节数, 例如一个 dtype 为 float64 的 ndarray 的元素的大小为 8.
    np.ndim ndarray 的属性, ndarray 的维度数.
    np.shape ndarray 的属性, 为包含 ndarray 每个维度的大小的 tuple.

    数组变换

    • np.reshape: 返回一个新的按照给定的维度改变的 ndarray
    • np.resize: 在原位修改 ndarray 的维度
    • np.ravel: 把ndarray变为一维的数组,格式、元素数量不变
    • np.squeeze: 返回一个把长度为 1 的维度去掉的 ndarray
    >>> x = np.array([[[0], [1], [2]]])
    >>> x.shape
    (1, 3, 1)
    >>> x.squeeze()
    array([0, 1, 2])
    >>> x.squeeze().shape
    (3,)
    

    运算

    • np.nonzero(a)/a.nonzero(): 返回一个tuple,包含所有不为0的元素的索引
    >>> a
    array([[ 4,  0,  6],
           [ 2, 12, 12]])
    >>> a.nonzero()
    (array([0, 0, 1, 1, 1]), array([0, 2, 0, 1, 2])) # 返回了五个indices,没有返回(0, 1)的索引
    
    • x.repeat()
    >>> x = np.array([[1,2],[3,4]])
    >>> x.repeat(2) # 按元素重复
    array([1, 1, 2, 2, 3, 3, 4, 4])
    >>> x.repeat(2,axis=0) # 按行重复
    array([[1, 2],
           [1, 2],
           [3, 4],
           [3, 4]])
    >>> x.repeat(2,axis=1) # 按列重复
    array([[1, 1, 2, 2],
           [3, 3, 4, 4]])
    
    • np.compress: 按照给定的bool list来选取ndarray中的值, 返回一个新的 ndarray
    >>> a
    array([[6, 2, 4, 5, 5, 3],
           [6, 9, 5, 1, 3, 5]])
    >>> a.compress([True, True, False, False, True])
    array([6, 2, 5])
    >>> a
    array([[6, 2, 4, 5, 5, 3],
           [6, 9, 5, 1, 3, 5]])
    >>> a.compress([True, True, False, False, True], axis=1)
    array([[6, 2, 5],
           [6, 9, 3]])
    >>> a.compress([True, True, False, False, True], axis=0) # 因为没有五行,所以会错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: index 4 is out of bounds for size 2
    >>> a.compress([True, False], axis=0)
    array([[6, 2, 4, 5, 5, 3]])
    >>> a.compress([False, True], axis=0)
    array([[6, 9, 5, 1, 3, 5]])
    
    • np.argsort(b)/b.argsort(): 返回元素排序所对应的序号
    • np.sort(b)/b.sort(): 在原位排序
    >>> b
    array([[ 6,  2,  4,  5,  5,  3],
           [ 1,  3, 10,  5,  6,  9]])
    >>> b.argsort()
    array([[1, 5, 2, 3, 4, 0],
           [0, 1, 3, 4, 5, 2]])
    >>> np.sort(b)
    array([[ 2,  3,  4,  5,  5,  6],
           [ 1,  3,  5,  6,  9, 10]])
    

    单目运算函数

    np.max: 返回最大值
    np.argmax: 返回最大的值的序号
    np.min: 返回最小值
    np.argmin: 返回最小的值的序号
    np.absolute: 计算绝对值,np.absolute(a) 或者 np.abs(a),对于非复数的数组,np.fabs 速度更快
    np.exp: 计算 e 的指数
    np.sqrt: 计算平方根
    np.square: 计算平方
    np.log, np.log10, np.log2, np.log1p: 分别为以 e, 10, 2 为底取 log, 和 log(1 + x)
    np.sign: 取数值的正负号
    np.ceil: 计算比每一个元素大或相等的最小的整数
    np.floor: 计算比每一个元素小或相等的最大的整数
    np.rint: 近似到最近的整数
    np.clip(a, a_min, a_max, out=None): 返回一个 ndarray, 其元素的值如果小于min,就会被min值替代;如果大于max,就会被max值替代
    np.modf: 返回一个 tuple, 包含两个数组, 一个是小数部分, 一个是整数部分
    np.cos, np.cosh, np.sin, np.sinh, np.tan, np.tanh, np.arccos, np.arccosh, np.arcsin, np.arcsinh, np.arctan, np.arctanh: 三角函数和反三角函数

    >>> c
    array([  6,   2,   4,   5,   5,   3,   1,   3, 100,   5,   6,   9])
    >>> c.clip(2, 10)
    array([ 6,  2,  4,  5,  5,  3,  2,  3, 10,  5,  6,  9])
    >>> c
    array([  6,   2,   4,   5,   5,   3,   1,   3, 100,   5,   6,   9])
    >>> c.clip([3,4,1,1,1,4,4,4,4,4,10,10], 8)
    array([ 6,  4,  4,  5,  5,  4,  4,  4,  8,  5, 10, 10])
    

    双目运算函数

    np.add(a, b): 两个数组元素一一对应相加.
    np.substract(a, b): 两个数组元素一一对应相减.
    np.multiply(a, b): 两个数组元素一一对应相乘.
    np.devide(a, b): 两个数组元素一一对应相除.
    np.maximum, np.fmax: 一一比较两个数组中元素大小, 返回相应位置最大的. np.fmax 会忽略 np.NAN, 而 np.maximum 则返回 np.NAN.
    np.minimum, np.fmin: 一一比较两个数组中元素大小, 返回相应位置最小的. np.fmin 会忽略 np.NAN, 而 np.minimum 则返回 np.NAN.

    集合运算

    np.unique: 返回所有不重复的元素排序后的数组
    np.intersect1d: 返回两个数组交集后排序的数组
    np.union1d: 返回两个数组并集后排序的数组
    np.in1d: 返回一个布尔值数组, 判断一个数组元素是否在另一个数组中
    np.setdiff1d: 返回一个数组, 其中包含在第一个输入数组而不在第二个输入数组的元素
    np.setxor1d 返回不同时在两个输入数组的元素的数组

    统计方法

    用于布尔数组的统计方法:

    sum : 统计数组/数组某一维度中的True的个数
    any: 统计数组/数组某一维度中是否存在一个/多个True
    all:统计数组/数组某一维度中是否都是True

    普通的统计方法:

    np.sum: 计算数组的和, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的和
    np.mean: 计算数组的均值, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的均值
    np.std: 计算数组的标准差, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的标准差
    np.var: 计算数组的标准差, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的标准差
    np.min, np.max: 计算数组的最小值或最大值, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的最小值或最大值
    np.argmin, np.argmax: 计算数组的最小值或最大值的 index, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的最小值或最大值 index
    np.cumsum: 累加
    np.cumprod: 累乘

    参考至:

    相关文章

      网友评论

        本文标题:Python学习笔记:NumPy

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