zoukankan      html  css  js  c++  java
  • Python 的 Numpy 库

     

    Numpy:

    # NumPy库介绍
    
    # NumPy的安装
    
    #  NumPy系统是Python的一种开源的数值计算扩展
    #  可用来存储和处理大型矩阵。
    #  因为不是Python的内嵌模块,因此使用前需要安装。
    #  可以利用Python自带的pip工具自动安装。
    #  或者选择访问下面的网站,下载与Python版本匹配的exe安装文件手动安装。
    # http://sourceforge.net/projects/numpy/files/NumPy/
    #  安装完成后,打开Python3.4,运行命令import numpy,若不出现错误则说明安装成功。
    
    # NumPy的组成与功能
    #  Numpy (Numeric Python)可以被理解为一个用python实现的科学计算包,包括:
    #  强大的N维数组对象Array;
    #  成熟的函数库;
    #  实用的线性代数、傅里叶变换和随机数生成函数。
    #  提供了许多高级的数值编程工具,如:矩阵数据类、矢量处理,以及精密的运算库。
    
    # 基础知识
    #  NumPy的主要对象是同种元素的多维数组。
    #  维度(dimensions)叫做轴(axes)。
    #  轴的个数叫做秩(rank)。
    #  例如,在3D空间一个点的坐标 [1, 2, 3] 是一个秩为1的数组,因为它只有一个轴。轴长度为3.
    #  例如,在[[ 1., 0., 0.],[0.,1.,2.]]这个例子中,数组的秩为2。第一个维度长度为2,第二个维度长度为3.
    #  NumPy的数组类被称作ndarray,通常被称作数组。
    #    注意numpy.array和标准Python库类array并不相同,后者只处理一维数组和提供少量功能。
    #    ndarray对象属性主要见下表: 例如其中.shape表示数组的维度, .size表示数组元素的总个数。
    #
    #---属性---------解释--------------
    #ndarray.shape:数组的维度,这是一个指示数组在每个维度上大小的整数元组。
    #ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积。
    #ndarray.dtype:一个用来描述数组中元素类型的对象,可以通过使用标准Python类型创造dtype。
    #ndarray.itemsize:数组中每个元素字节的大小。
    #ndarry.data:包含实际数组元素的缓冲区,通常我们通过索引引用数组元素,不使用这个属性。
    #
    from numpy import *
    #例子:
    
    from numpy import  *
    a=arange(15).reshape(3,5)
    print(a)
    # [[ 0  1  2  3  4]
    #  [ 5  6  7  8  9]
    #  [10 11 12 13 14]]
    print(a.shape)  #(3, 5)
    print(a.ndim) #2
    print(a.dtype.name) #'int32'
    print(a.itemsize) #4
    print(a.size) #15
    print(type(a)) #<class 'numpy.ndarray'>
    b=array([6,7,8])
    print(b) #[6 7 8]
    print(type(b)) #<class 'numpy.ndarray'>
    
    # 创建数组(方法一)
    #  创建数组的方法有多种,比如可以使用array函数利用常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型决定。示例如下:
    from numpy import *
    a=array([2,3,4])
    print(a) #[2 3 4]
    print(a.dtype) #int32
    b=array([1.2,3.5,5.1])
    print(b.dtype) #float64
    
    #一个常见的错误包括用多个数值参数调用‘array’而不是提供一个由数值组成的列表作为一个参数。
    # a=array(1,2,3,4) #wrong
    # Traceback (most recent call last):
    #   File "I:/GithubCodes/PracticeOfPython/PracticeOfPython/201803/180317-Numpy.py", line 69, in <module>
    #     a=array(1,2,3,4) #wrong
    # ValueError: only 2 non-keyword arguments accepted
    a=array([1,2,3,4]) #Right
    c=array([[1,2],[3,4]],dtype=complex)
    print(c)
    # [[ 1.+0.j  2.+0.j]
    #  [ 3.+0.j  4.+0.j]]
    
    # 创建数组(方法二)
    #  NumPy提供了一些使用占位符创建数组的函数。
    #  例如: 函数zeros创建一个全是0的数组,函数ones创建一个全1的数组,函数empty创建一个内容随机并且依赖与内存状态的数组。默认创建的数组类型(dtype)都是float64 。示例如下:
    print(zeros((3,4)))
    # [[ 1.+0.j  2.+0.j]
    #  [ 3.+0.j  4.+0.j]]
    # [[ 0.  0.  0.  0.]
    #  [ 0.  0.  0.  0.]
    #  [ 0.  0.  0.  0.]]
    
    print(ones((2,3,4),dtype=int16)) #dtype can also be specified指定
    # [[[1 1 1 1]
    #   [1 1 1 1]
    #   [1 1 1 1]]
    #
    #  [[1 1 1 1]
    #   [1 1 1 1]
    #   [1 1 1 1]]]
    
    print(empty((2,3)))
    # [[  1.39069238e-309   1.39069238e-309   1.39069238e-309]
    #  [  1.39069238e-309   1.39069238e-309   1.39069238e-309]]
    
    # 创建数组(方法三)
    #  此外NumPy提供一个arange的函数返回数组,示例如下:
    print(arange(10,30,5))
    # [10 15 20 25]
    print(arange(0,2,0.3)) # it accepts float arguments
    # [ 0.   0.3  0.6  0.9  1.2  1.5  1.8]
    
    # 打印数组
    #  打印数组时,NumPy以类似嵌套列表的形式显示。
    #   示例如下:其中一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。
    a=arange(6) #1-d array
    print(a)
    # [0 1 2 3 4 5]
    
    b=arange(12).reshape(4,3) #2-d array
    print(b)
    # [[ 0  1  2]
    #  [ 3  4  5]
    #  [ 6  7  8]
    #  [ 9 10 11]]
    
    c=arange(24).reshape(2,3,4) #3-d 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]]]
    
    # 基本运算
    #  数组的算术运算是按元素进行。新的数组被创建并且被结果来填充。
    #    NumPy中的乘法运算符*指示按元素计算
    #  矩阵乘法可以使用dot函数或创建矩阵对象实现。示例如下:
    a=array([20,30,40,50])
    b=arange(4)
    print(b) #b为:[0 1 2 3]
    c=a-b
    print(c) #c为:[20 29 38 47]
    d=b**2
    print(d) #d 为: [0 1 4 9]
    e=10*sin(a)
    print(e) #e为:[ 9.12945251 -9.88031624  7.4511316  -2.62374854]
    f=a<35
    print(f) #f 为: [ True  True False False]
    
    
    #  非数组的运算可以利用ndarrary类方法实现。
    #  通用函数(ufunc) -- NumPy提供常见的数学函数。如sin cos和exp 如sin, cos和exp。
    #    在NumPy里这些函数作用按数组的元素运算,产生一个数组作为输出。示例如下:
    a=random.random((2,3))
    print(a)
    # [[ 0.176555    0.98220276  0.09996688]
    #  [ 0.02275491  0.139681    0.22131763]]
    print(a.sum()) #1.64247817609
    print(a.min()) #0.0227549118614
    print(a.max()) #0.982202755153
    
    b=arange(12).reshape(3,4)
    print(b)
    # [[ 0  1  2  3]
    #  [ 4  5  6  7]
    #  [ 8  9 10 11]]
    print(b.sum(axis=0)) #sum of each column
    # [12 15 18 21]
    print(b.min(axis=1)) #min of each row
    # [0 4 8]
    print(b.cumsum(axis=1)) #cumulative累加 sum along each row
    # [[ 0  1  3  6]
    #  [ 4  9 15 22]
    #  [ 8 17 27 38]]
    
    # 索引、切片与迭代
    #  数组还可以被索引、切片和迭代,示例如下:
    a=arange(10)**3
    print(a) #[  0   1   8  27  64 125 216 343 512 729]
    print(a[2]) #8
    print(a[2:5])  #[ 8 27 64]
    b=a[:6:2]=-1000  #equivalent to a[0:6:2]=-1000; from start to position 6,exclusive, set every 2nd element to -1000
    print(b) #-1000? 答案应该是:[-1000,1,-1000,27,-1000,125,216,343,512,729
    print(a[::-1]) #reversed a
    # [  729   512   343   216   125 -1000    27 -1000     1 -1000]
    
    for i in a :
        print(i**(1/3.),)
    # nan
    # 1.0
    # nan
    # 3.0
    # nan
    # 5.0
    # 6.0
    # 7.0
    # 8.0
    # 9.0
    
    
    # 矩阵运算
    #  NumPy对于多维数组的运算,缺省情况下并不使用矩阵运算,对数组进行矩阵运算,可调用相应的函数。
    #  numpy库也提供了matrix类,使用matrix类创建的是矩阵对象,它们的加减乘除运算缺省采用矩阵方式计算,用法和matlab十分类似。示例如下:
    a=matrix([[1,2,3],[5,5,6],[7,9,9]])
    print(a*a**-1)
    # [[  1.00000000e+00   0.00000000e+00   0.00000000e+00]
    #  [  4.44089210e-16   1.00000000e+00   4.44089210e-16]
    #  [  0.00000000e+00  -4.44089210e-16   1.00000000e+00]]
    
    #  矩阵中更高级的一些运算可以在NumPy的线性代数子库linalg中找到。
    # 例如inv函数计算逆矩阵,solve函数可以求解多元一次方程组程组。

     

    函数和方法的总览
     NumPy库提供作用丰富的函数和方法,下面是一个分类排列汇目录总揽,可通过手册即用即学。

    ---创建数组的函数:
    arang,array,cpoy,...

    ---转化的函数:
    astype,atleast 1d

    ---操作的函数:
    array split

    ---询问的函数:
    all,any,nonzero,where
  • 相关阅读:
    安全管道工具SSF
    Dumpzilla工具第615行bug的解决办法
    火狐浏览器信息提取工具Dumpzilla
    通过构造函数来创建新对象
    利用canvas绘制序列帧动画
    canvas的图片绘制案例
    使用canvas绘制饼状图
    模仿制作京东的侧边提示栏
    使用canvas绘制扇形图
    使用canvas制作简单表格
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/8682656.html
Copyright © 2011-2022 走看看