• 技术文章 >后端开发 >Python教程

    Python中的Numpy入门教程

    2016-06-16 08:44:20原创603
    1、Numpy是什么

    很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。 在以下的代码示例中,总是先导入了numpy:

    复制代码 代码如下:


    >>> import numpy as np
    >>> print np.version.version
    1.6.2


    2、多维数组

    多维数组的类型是:numpy.ndarray。

    使用numpy.array方法

    以list或tuple变量为参数产生一维数组:

    复制代码 代码如下:

    >>> print np.array([1,2,3,4])
    [1 2 3 4]
    >>> print np.array((1.2,2,3,4))
    [ 1.2 2. 3. 4. ]
    >>> print type(np.array((1.2,2,3,4)))


    以list或tuple变量为元素产生二维数组:
    复制代码 代码如下:


    >>> print np.array([[1,2],[3,4]])
    [[1 2]
    [3 4]]


    生成数组的时候,可以指定数据类型,例如numpy.int32, numpy.int16, and numpy.float64等:
    复制代码 代码如下:


    >>> print np.array((1.2,2,3,4), dtype=np.int32)
    [1 2 3 4]


    使用numpy.arange方法
    复制代码 代码如下:


    >>> print np.arange(15)
    [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
    >>> print type(np.arange(15))

    >>> print np.arange(15).reshape(3,5)
    [[ 0 1 2 3 4]
    [ 5 6 7 8 9]
    [10 11 12 13 14]]
    >>> print type(np.arange(15).reshape(3,5))


    使用numpy.linspace方法

    例如,在从1到3中产生9个数:

    复制代码 代码如下:


    >>> print np.linspace(1,3,9)
    [ 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75 3. ]


    使用numpy.zeros,numpy.ones,numpy.eye等方法可以构造特定的矩阵

    例如:

    复制代码 代码如下:


    >>> print np.zeros((3,4))
    [[ 0. 0. 0. 0.]
    [ 0. 0. 0. 0.]
    [ 0. 0. 0. 0.]]
    >>> print np.ones((3,4))
    [[ 1. 1. 1. 1.]
    [ 1. 1. 1. 1.]
    [ 1. 1. 1. 1.]]
    >>> print np.eye(3)
    [[ 1. 0. 0.]
    [ 0. 1. 0.]
    [ 0. 0. 1.]]


    创建一个三维数组:
    复制代码 代码如下:


    >>> print np.zeros((2,2,2))
    [[[ 0. 0.]
    [ 0. 0.]]

    [[ 0. 0.]
    [ 0. 0.]]]


    获取数组的属性:
    复制代码 代码如下:


    >>> a = np.zeros((2,2,2))
    >>> print a.ndim #数组的维数
    3
    >>> print a.shape #数组每一维的大小
    (2, 2, 2)
    >>> print a.size #数组的元素数
    8
    >>> print a.dtype #元素类型
    float64
    >>> print a.itemsize #每个元素所占的字节数
    8


    数组索引,切片,赋值

    示例:

    复制代码 代码如下:


    >>> a = np.array( [[2,3,4],[5,6,7]] )
    >>> print a
    [[2 3 4]
    [5 6 7]]
    >>> print a[1,2]
    7
    >>> print a[1,:]
    [5 6 7]
    >>> print a[1,1:2]
    [6]
    >>> a[1,:] = [8,9,10]
    >>> print a
    [[ 2 3 4]
    [ 8 9 10]]


    使用for操作元素
    复制代码 代码如下:


    >>> for x in np.linspace(1,3,3):
    ... print x
    ...
    1.0
    2.0
    3.0


    基本的数组运算

    先构造数组a、b:

    复制代码 代码如下:


    >>> a = np.ones((2,2))
    >>> b = np.eye(2)
    >>> print a
    [[ 1. 1.]
    [ 1. 1.]]
    >>> print b
    [[ 1. 0.]
    [ 0. 1.]]


    数组的加减乘除:
    复制代码 代码如下:


    >>> print a > 2
    [[False False]
    [False False]]
    >>> print a+b
    [[ 2. 1.]
    [ 1. 2.]]
    >>> print a-b
    [[ 0. 1.]
    [ 1. 0.]]
    >>> print b*2
    [[ 2. 0.]
    [ 0. 2.]]
    >>> print (a*2)*(b*2)
    [[ 4. 0.]
    [ 0. 4.]]
    >>> print b/(a*2)
    [[ 0.5 0. ]
    [ 0. 0.5]]
    >>> print (a*2)**4
    [[ 16. 16.]
    [ 16. 16.]]

    使用数组对象自带的方法:

    复制代码 代码如下:


    >>> a.sum()
    4.0
    >>> a.sum(axis=0) #计算每一列(二维数组中类似于矩阵的列)的和
    array([ 2., 2.])
    >>> a.min()
    1.0
    >>> a.max()
    1.0

    使用numpy下的方法:

    复制代码 代码如下:


    >>> np.sin(a)
    array([[ 0.84147098, 0.84147098],
    [ 0.84147098, 0.84147098]])
    >>> np.max(a)
    1.0
    >>> np.floor(a)
    array([[ 1., 1.],
    [ 1., 1.]])
    >>> np.exp(a)
    array([[ 2.71828183, 2.71828183],
    [ 2.71828183, 2.71828183]])
    >>> np.dot(a,a) ##矩阵乘法
    array([[ 2., 2.],
    [ 2., 2.]])


    合并数组

    使用numpy下的vstack和hstack函数:

    复制代码 代码如下:


    >>> a = np.ones((2,2))
    >>> b = np.eye(2)
    >>> print np.vstack((a,b))
    [[ 1. 1.]
    [ 1. 1.]
    [ 1. 0.]
    [ 0. 1.]]
    >>> print np.hstack((a,b))
    [[ 1. 1. 1. 0.]
    [ 1. 1. 0. 1.]]

    看一下这两个函数有没有涉及到浅拷贝这种问题:

    复制代码 代码如下:


    >>> c = np.hstack((a,b))
    >>> print c
    [[ 1. 1. 1. 0.]
    [ 1. 1. 0. 1.]]
    >>> a[1,1] = 5
    >>> b[1,1] = 5
    >>> print c
    [[ 1. 1. 1. 0.]
    [ 1. 1. 0. 1.]]


    可以看到,a、b中元素的改变并未影响c。


    深拷贝数组

    数组对象自带了浅拷贝和深拷贝的方法,但是一般用深拷贝多一些:

    复制代码 代码如下:

    >>> a = np.ones((2,2))
    >>> b = a
    >>> b is a
    True
    >>> c = a.copy() #深拷贝
    >>> c is a
    False

    基本的矩阵运算

    转置:

    复制代码 代码如下:


    >>> a = np.array([[1,0],[2,3]])
    >>> print a
    [[1 0]
    [2 3]]
    >>> print a.transpose()
    [[1 2]
    [0 3]]


    迹:
    复制代码 代码如下:

    >>> print np.trace(a)
    4


    numpy.linalg模块中有很多关于矩阵运算的方法:
    复制代码 代码如下:


    >>> import numpy.linalg as nplg

    特征值、特征向量:

    复制代码 代码如下:


    >>> print nplg.eig(a)
    (array([ 3., 1.]), array([[ 0. , 0.70710678],
    [ 1. , -0.70710678]]))

    3、矩阵

    numpy也可以构造矩阵对象,这里不做讨论。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Python Numpy
    千万级数据并发解决方案

    相关文章推荐

    • 详细介绍python的numpy模块• Python多进程知识点总结• Python模块化整理和第三方模块的安装(总结分享)• 一起聊聊Python的编码样式• 带你搞懂Python反序列化
    1/1

    PHP中文网