• Numpy基础使用


    Numpy库

    Numpy是高性能科学计算和数据分析的基础包。

    Numpy本身并没有提供多么高级的数据分析功能,理解 Numpuy 数组以及面向数组的计算将有助于你更加高效的使用诸如 pandas 之类的工具

    一、ndarray数组基础

    Pyhton 中用列表保存一组值,可将列表当成是数组使用。此外,Python 有 array 模快,但他不支持多维数组,无论是列表还是 array 模块都没有科学运算函数,不适合做矩阵等科学计算。因此,Numpy没有使用 Python 本身的数组机制,而是提供了 ndarray 数组对象,该对象不断能方便的存取数组,而且拥有丰富的数组计算函数,比如向量的加法、减法、乘法等。

    使用 ndarray 数组,首先需要导入 Numpy 函数库,也可以直接导入该函数库:

    from numpy import *

    或指定导入库的别名(在引入多个库的时候,推荐使用这个方法)。

    import numpy as np

    下面正式进入Numpy的数组世界。如果没有说明,所称数组均为 Numpy 数组对象,与 Python 的列表和 array模块无关。

    1.1 创建数组

    创建数组是进行数组计算的先决条件,可以通过array()函数定义数组实例对象,其参数为Python 的序列对象(比如列表。)如果想定义多维数组,则传递多层嵌套的序列。例如下面这条语句定义了一个二维数组,其大小为(2,3),即有2行,3列。

    a = np.array([[1,2,4.0],[3,6,9]])
    a
    array([[ 1.,  2.,  4.],
           [ 3.,  6.,  9.]])

    接着我们看下数组的一些属性:

    # 查看行数
    a.ndim
    2
    # 查看数组的维数,返回(n,m), 其中 n 为行数,m 为列数。
    a.shape
    (2, 3)
    # 查看元素的类型,比如 numpy.int32、numpy.float64
    a.dtype
    dtype('float64')

    1.2 特殊数组

    Numpy的特殊数组主要有以下几种:

    • zeros数组:全零数组,元素全为0;
    • ones数组:全1数组,元素全为1;
    • empty数组:空数组,元素全近似为0;

    下面是全零、全1、空数组的创建方法:

    np.zeros((2,3))
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])
    np.ones((3,4))
    array([[ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.]])
    np.empty((3,2))
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])

    1.3 序列数组

    arange函数:他与 Python 的 range 函数相似,但他属于Numpy 库,其参数依次为:开始值、结束值、步长

    np.arange(1,20,5)
    array([ 1,  6, 11, 16])

    我们还可以使用 linspace 函数创建等差序列数组,其参数依次为:开始值、结束值、元素数量

    np.linspace(0,2,9)
    array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])

    1.4 数组索引

    Numpy 数组的每个元素、每行元素、每列元素都可以用索引访问,不过注意:索引是从 0 开始的。

    其操作与列表基本相同。

    a = np.array([[1,2,4.0],[3,6,9]])
    # 取 a 的第一行元素
    a[0]
    array([ 1.,  2.,  4.])
    # 取 a 的第二列元素
    a[:,1]
    array([ 2.,  6.])
    # 取 a 的第一行的第三个元素
    a[0,2]
    4.0

    1.5 数组运算

    a = np.array([1,2,3])
    b = np.array([4.,5,6])
    # 加法运算
    a + b
    array([ 5.,  7.,  9.])
    # 减法运算
    a - b
    array([-3., -3., -3.])
    # 乘法运算
    a * b
    array([  4.,  10.,  18.])
    # 乘方运算:a的2次方
    a ** 2
    array([1, 4, 9])
    # 除法运算
    a/b
    array([ 0.25,  0.4 ,  0.5 ])
    # 数组点乘
    np.dot(a,b)
    32.0
    # 判断大小,返回 bool 值
    a >= 2
    array([False,  True,  True], dtype=bool)
    # a中最大的元素
    a.max()
    3
    # a中最小的元素
    a.min()
    1
    # a的和
    a.sum()
    6

    1.6 数组拷贝

    数组的拷贝分为浅拷贝和深拷贝两种,浅拷贝通过数组变量的复制完成,深拷贝使用数组对象的copy方法完成。

    浅拷贝只拷贝数组的引用,如果对拷贝对象修改。原数组也将修改。

    下面的代码演示了浅拷贝的方法:

    a = np.ones((2,3))
    a
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    # b 为 a 的浅拷贝
    b = a
    b
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    # 对 b 进行修改,a 也会被修改
    b[1,2] = 9
    a
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-2-a2b0891fb16b> in <module>()
          1 # 对 b 进行修改,a 也会被修改
    ----> 2b[1,2] = 9展开输出 ↓    
          3 a
    
    NameError: name 'b' is not defined

    深拷贝会复制一份和原数组一样的数组,但他们在内存中是分开存放的,所以改变拷贝数组,原数组不会改变。

    下面的代码演示了 b 使用 copy 方法从原数组 a 复制一份拷贝的情况。

    a = np.ones((2,3))
    a
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    b = a.copy()
    b[1,2] = 9
    b
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  9.]])
    a
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])

    二、矩阵

    2.1 创建矩阵

    Numpy的矩阵对象与数组对象相似,主要不同之处在于,矩阵对象的计算遵循矩阵数学运算规律。矩阵使用 matrix 函数创建,以(2,2)大小的矩阵为例(2行2列),定义方法如下:

    A = np.matrix([[1.0,2.0],[3.0,4.0]])
    A
    matrix([[ 1.,  2.],
            [ 3.,  4.]])
    # 查看A的类型
    type(A)
    numpy.matrixlib.defmatrix.matrix

    2.2 矩阵运算

    矩阵的常用数学运算有转置、乘法、求逆等。下面的代码演示了矩阵的基本运算。

    # 转置
    A.T
    matrix([[ 1.,  3.],
            [ 2.,  4.]])
    B = np.matrix([[3.0],[5.0]])
    B
    matrix([[ 3.],
            [ 5.]])
    # 矩阵乘法
    A * B
    matrix([[ 13.],
            [ 29.]])
    # 逆矩阵
    A.I
    matrix([[-2. ,  1. ],
            [ 1.5, -0.5]])
    # 解线性方程组
    solve(A, B)
    matrix([[-1.],
            [ 2.]])
     
  • 相关阅读:
    MYSQL查询和插入数据的流程是怎样的
    Nacos服务心跳和健康检查源码介绍
    Nacos使用和注册部分源码介绍
    实用程序包utils
    SOLID原则
    前端实用程序包utils
    实现 strStr()
    记一次华为机试
    十分钟入门 Python 教程
    字符串转换整数 (atoi)
  • 原文地址:https://www.cnblogs.com/aizhinong/p/12885149.html
Copyright © 2020-2023  润新知