博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---26、numpy(1)

Posted on 2020-01-14 11:38  兰智杰  阅读(191)  评论(0编辑  收藏  举报

Scipy库简介

  Scipy库是基于Python生态的一款开源数值计算、科学与工程应用的开源软件,主要包括NumPy、SciPy、pandas、Matplotlib等

  官方文档:https://scipy.org/

  1、NumPy——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵;这个是很基础的扩展,其余的扩展都是以此为基础

  2、SciPy——数值计算库,在NumPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数;方便、易于使用、专为科学和工程设计的Python工具包;它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等

  3、pandas——数据分析,基于NumPy 的一种工具,为了解决数据分析任务而创建的;pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具

  4、Matplotlib——绘图,对于图像美化方面比较完善,可以自定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析

NumPy模块

  1、NumPy模块是Python的一种开源的数值计算扩展,是一个用python实现的科学计算包,主要包括:

    (1)一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,称为ndarray(N-dimensional array object)

    (2)用于对整组数据进行快速运算的标准数学函数:ufunc(universal function objec)

    (3)实用的线性代数、傅里叶变换和随机数生成函数

    (4)NumPy和稀疏矩阵的运算包SciPy配合使用更加方便

  2、NumPy的数组类被称作ndarray,通常被称作数组,NumPy中定义的最终要的对象是称为ndarray的N维数组类型,它描述相同类型的元素集合;可以使用基于零的索引访问集合中的项目

    注意:numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能

    (1)一种由相同类型的元素组成的多维数组,元素数量是事先给定好的

    (2)元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型

    (3)ndarray的大小固定,创建好数组后数组大小是不会再发生改变的

  3、可以通过numpy模块中的常用的几个函数进行创建ndarray多维数组对象,主要函数如下:

    (1)array函数:接收一个普通的python序列,并将其转换为ndarray

    (2)zeros函数:创建指定长度或者形状的全零数组

    (3)ones函数:创建指定长度或者形状的全1数组

    (4)empty函数:创建一个没有任何具体值的数组(准确地说是创建一些未初始化的ndarray多维数组)

  4、array()函数——接收一个普通的python序列,并将其转换为ndarray

    numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

    参数描述:
      (1)object——任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列

      (2)dtype——数组的所需数据类型(可选)

      (3)copy——(可选)默认为true,对象是否被复制

      (4)order——C(按行)、F(按列)或A(任意,默认)

      (5)subok——默认情况下,返回的数组被强制为基类数组; 如果为True,则返回子类

      (6)ndimin——指定返回数组的最小维数

import numpy as np
a1 = np.array([1,2,3])
print(a1)                #输出为[1 2 3]
print(type(a1))          #输出为<class 'numpy.ndarray'>
'''
输出为     [[1 2]
            [3 4]]
'''
#多于一个维度
a2 = np.array([[1,2],[3,4]])
print(a2)
#最小维度
a3 = np.array([1,2,3,4,5],ndmin = 2)
print(a3)               #维度为2   输出为[[1 2 3 4 5]]

  5、numpy.empty()函数——创建指定形状和dtype的未初始化数组

    numpy.empty(shape, dtype = float, order = 'C')

    参数描述:
      (1)shape——空数组的形状,整数或整数元组

      (2)dtype——所需的输出数组类型(可选)

      (3)order——'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

'''
输出为 [[ 12   9  51]
        [-28  -2   7]
        [  0   0  96]]
'''
import numpy as np
#例: 数组元素为随机值
arr = np.empty((3,3),dtype = 'i1')
print(arr)

  6、zeros()函数——创建指定长度或者形状的全零数组

'''
输出为 [[0. 0. 0.]
        [0. 0. 0.]
        [0. 0. 0.]]
        
       [[(0, 0) (0, 0) (0, 0)]
        [(0, 0) (0, 0) (0, 0)]
        [(0, 0) (0, 0) (0, 0)]]
'''
import numpy as np
arr = np.zeros((3,3))
print(arr)
#自定义类型
arr = np.zeros((3,3), dtype =  [('x',  'i4'),  ('y',  'i4')])
print(arr)

  7、ones()函数——创建指定长度或者形状的全1数组

'''
输出为 [[[1. 1. 1. 1.]
        [1. 1. 1. 1.]
        [1. 1. 1. 1.]]

        [[1. 1. 1. 1.]
        [1. 1. 1. 1.]
        [1. 1. 1. 1.]]]

       [[(1, 1) (1, 1) (1, 1)]
        [(1, 1) (1, 1) (1, 1)]
        [(1, 1) (1, 1) (1, 1)]]
'''
import numpy as np
arr = np.ones((2,3,4))                      #多一个参数就多一维
print(arr)
arr = np.ones((3,3), dtype =  [('x',  'i4'),  ('y',  'i4')])
print(arr)

  8、numpy.asarray()函数——类似 numpy.array()可以将Python序列转换为ndarray

#来自列表
import numpy as np
arr = [1,2,3,4]
arr2 = np.asarray(arr)
print(arr2)             #输出为[1 2 3 4]
print(type(arr))        #输出为<class 'list'>
print(type(arr2))       #输出为<class 'numpy.ndarray'>
#来自元组
arr = (1,2,3,4)
arr2 = np.asarray(arr)
print(arr2)             #输出为[1 2 3 4]
print(type(arr))        #输出为<class 'tuple'>
print(type(arr2))       #输出为<class 'numpy.ndarray'>
#来自元组列表
arr = [(1,2,3,4),(5,6,7,8)]
arr2 = np.asarray(arr)
print(arr2)             #输出为[[1 2 3 4]
                        #      [5 6 7 8]]
print(type(arr))        #输出为<class 'list'>
print(type(arr2))       #输出为<class 'numpy.ndarray'>

  9、arange()函数——类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组(注意:最终创建的数组不包含终值

    numpy.arange(start,stop,step,dtype)

import numpy as np
arr = np.arange(5,dtype = float)
print(arr)                      #输出为[0. 1. 2. 3. 4.]

  10、linspace()函数——通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值;

    numpy.linspace(start,stop,num,endpoint,retstep,dtype)——等差数列

    参数描述:

      (1)start——起始值

      (2)stop——结束值

      (3)num——生成等间隔样例的数量,默认为50

      (4)endpoint——序列中是否包含stop值,默认为True

import numpy as np
arr = np.linspace(10,20,9)
print(arr)                  #输出为[10.   11.25 12.5  13.75 15.   16.25 17.5  18.75 20.  ]
arr = np.linspace(10,20,5,endpoint=False)
print(arr)                  #输出为[10. 12. 14. 16. 18.]
arr = np.linspace(10,20,5,retstep=True)
#返回步长
print(arr)                  #输出为(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)

  11、logspace()函数——与linspace函数类似,不过创建的是等比数列数组

    numpy.logscale(start, stop, num, endpoint, base, dtype)——等比数列

    参数描述:

      (1)start——起始值是base ** start

      (2)stop——终止值是base ** stop

      (3)num——范围内的数值数量,默认为50

      (4)endpoint——如果为True,终止值包含在输出数组当中

      (5)base——对数空间的底数,默认为10

      (6)dtype——输出数组的数据类型,如果没有提供,则取决于其它参数

import numpy as np
arr = np.logspace(1,10,4,base = 2)
print(arr)              #输出为[   2.   16.  128. 1024.]

  12、random()函数——使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定

    参数描述:      

      (1)rand——返回 0 - 1 随机值

import numpy as np
'''
输出为 [[0.37500668 0.74611082 0.67723995]
        [0.95072134 0.75339058 0.58127466]
        [0.93411471 0.50653883 0.01552461]]
'''
arr = np.random.rand(9).reshape(3,3)
print(arr)
'''
输出为    [[[0.85710296 0.25096321 0.32426975]
            [0.87584439 0.06502409 0.4812974 ]]

           [[0.42684019 0.66201371 0.55012901]
            [0.85204354 0.73265262 0.35118022]]

           [[0.79208796 0.38246158 0.46882712]
            [0.80995298 0.6084888  0.50741934]]]
'''
arr = np.random.rand(3,2,3)
print(arr)

      (2)randn——返回一个样本具有标准正态分布

import numpy as np
'''
输出为 [[-0.36778886  0.68050639  0.36906919]
        [ 1.55866868  0.6097933   0.58081441]
        [ 0.85465776 -0.10550039 -0.21308389]]
'''
arr = np.random.randn(9).reshape(3,3)
print(arr)
'''
输出为 [[[ 1.47699218  0.04056436 -1.05175789]
         [ 0.38525111 -0.01178284  0.98338712]]

        [[ 1.5737636   1.0357023   0.11619424]
         [-1.94774901  0.82981912 -0.08167648]]

        [[ 0.96521109  0.67883936  1.45519362]
         [-1.33540844  0.2917183  -1.16960524]]]
'''
arr = np.random.randn(3,2,3)
print(arr)

      (3)randint——返回随机的整数,位于半开区间[low,hight)size = 10 (3,3)

import numpy as np
'''
输出为 [[4 7 1 3]
        [6 1 2 1]]
'''
arr = np.random.randint(1,9,size = (2,4))
print(arr)

      (4)random_integers(low[, high, size])——返回随机的整数,位于闭区间,用法和randint相似,会产生系统弃用警告,建议使用randint(DeprecationWarning: This function is deprecated)

import numpy as np
'''
输出为 [[4 7 1 5]
        [7 5 4 9]]
'''
arr = np.random.random_integers(1,9,size =(2,4))
print(arr)

      (5)random——返回随机浮点数

import numpy as np
'''
输出为   [[[0.55981732 0.50458701 0.06569627]
          [0.43729729 0.06107235 0.67317236]]

         [[0.56241913 0.34069459 0.41658089]
          [0.36418892 0.57843563 0.07805239]]

         [[0.20352518 0.68265667 0.64557   ]
          [0.95150971 0.818009   0.74824369]]]
'''
arr = np.random.random((3,2,3))
print(arr)