Numpy简介

作者: zjlearn | 来源:发表于2017-01-05 17:40 被阅读140次

    numpy

    [TOC]

    简介

    标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。

    NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数

    包导入

    import numpy as np
    

    ndarray对象

    ndarray对象是一个同质的多维数组,其中存储相同数据类型,以整数进行索引的内容。
    以下是该对象具有的属性:

    • ndarray.ndim: 对象的维度数
    • ndarray.shape: 每个维度的深度
    • ndarray.size : 数组中总的元素数
    • ndarray.dtype : 数组中元素的类型
    • ndarray.itemsize: 数组元素的字节大小,比如说某一个元素是几个字节的。

    常用的函数

    创建

    1. 我们可以通过给array函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列,将创建多维数组(下例中的变量c)
      python中的序列对象包括了:列表, 元素
     np.array([1.2, 3.5, 5.1])
     np.array(1,2,3,4)    # WRONG
    np.array([(1.5,2,3), (4,5,6)]
    np.array( [ [1,2], [3,4] ], dtype=complex )
    

    其中第二项是经常犯的错误,直接使用多个数值调用array。数据类型是从序列对象中的元素推倒而来。

    1. 创建大小已知,元素值初始化的ndarray.
    np.zeros( (3,4) )  # 维度为(3,4)的数组,初始化为0
    np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specified
    np.empty( (2,3) ) #未初始化的, 输出变化可能非常的大
    np.arange( 10, 30, 5 ) #创建序列化的元素,参数:开始(默认0),结束,步长(默认1)
    np.arange( 0, 2, 0.3 ) #array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])
    np.linspace( 0, 2, 9 )  #创建固定个数的元素 9 numbers from 0 to 2       
    

    创建之后的序列,我们可以使用reshape对数组的维度进行修改

    x=np.linspace( 0, 2, 9 )
    x.reshape(3,3)  #改变数组的维度
    

    下面是剩下的一些函数:

    numpy.random.rand(d0, d1, ..., dn) #在指定的维度,随机的生成元素值,返回[0,1)的均匀分布
    numpy.random.randn(d0, d1, ..., dn)#返回指定维度数量标准正态分布样本
    sigma * np.random.randn(...) + mu  #生成其他的正态分布
    umpy.fromfunction(function, shape, **kwargs)[source]¶
    numpy.fromfile #从文件中生成,需要与其他的函数一起使用
    

    参考:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

    打印

    打印的规则如下:

    >>> c = np.arange(24).reshape(2,3,4)         # 3d array
    >>> print(c)
    [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
    

    基本操作

    1. 应用到数组中的基本操作是elementwise的。结果返回的是一个新的数组。
    >>> 10*np.sin(a)
    array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
    
    1. *操作符是elementwise的, numpy中的矩阵乘法是用dot
    2. +=, *= 运算符原地修改现有的多维数组
    a=np.ones((3,3),dtype=int)
    a*=3
    >>> a
    array([[3, 3, 3],
           [3, 3, 3]])
    
    1. 许多基本操作都是直接应用到ndarray类上面的,例如:
    >>> a = np.random.random((2,3))
    >>> a
    array([[ 0.18626021,  0.34556073,  0.39676747],
           [ 0.53881673,  0.41919451,  0.6852195 ]])
    >>> a.sum()
    2.5718191614547998
    >>> a.min()
    0.1862602113776709
    >>> a.max()
    0.6852195003967595
    

    默认的情况下,这些操作是价格ndarray当作list,而不管维度信息,不过你可以指定axis参数进行更细粒度的计算。

    >>> b = np.arange(12).reshape(3,4)
    >>> b
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> b.sum(axis=0)                            # sum of each column
    array([12, 15, 18, 21])
    >>>
    >>> b.min(axis=1)                            # min of each row
    array([0, 4, 8])
    

    array的维度信息:

    1. 全局的函数
      numpy提共了一些全局的函数
    2. 索引,切片
    3. 维度操作
    4. 堆叠不同的数组
      不同的数组可以沿着不同的维度堆叠起来。
    >>> a = np.floor(10*np.random.random((2,2)))
    >>> a
    array([[ 8.,  8.],
           [ 0.,  0.]])
    >>> b = np.floor(10*np.random.random((2,2)))
    >>> b
    array([[ 1.,  8.],
           [ 0.,  4.]])
    >>> np.vstack((a,b))
    array([[ 8.,  8.],
           [ 0.,  0.],
           [ 1.,  8.],
           [ 0.,  4.]])
    >>> np.hstack((a,b))
    array([[ 8.,  8.,  1.,  8.],
           [ 0.,  0.,  0.,  4.]])
    

    参考:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

    1. 复制和视图

    相关文章

      网友评论

        本文标题:Numpy简介

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