zoukankan      html  css  js  c++  java
  • numpy 基础操作

    一、numpy简介

    Numpy是高性能科学计算和数据分析的基础包,机器学习三剑客之一。Numpy库中最核心的部分是ndarray 对象,它封装了同构数据类型的n维数组。部分功能如下:

    • ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
    • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
    • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
    • 线性代数、随机数生成以及傅里叶变换功能。
    • 用于集成C、C++、Fortran等语言编写的代码的工具。

    二、NumPy的简单属性

    复制代码
    import numpy as np
    
    a = [[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12],
         [13, 14, 15, 16]]
    b = np.array(a)      # 创建数组
    size = b.size        # 数组元素个数
    shape = b.shape      # 数组形状,返回一个数组一维和二维长度的元组
    ndim = b.ndim        # 数组维度
    # numpy是无法直接判断出由数值与字符混合组成的数组中的数值型数据的,
    # 因为由数值类型和字符类型组成的numpy数组已经不是数值类型的数组了,而是dtype='<U11'。
    t = b.dtype          # 数据类型
    
    b[1, 2]     # 7
    b[1][2]     # 7
    
    array_zero = np.zeros([3, 4])   # 快速创建一个 3 × 4 的数组,值为0
    array_one = np.ones([3, 4])     # 快速创建一个 3 × 4 的数组,值为1
    
    # arange函数用于创建等差数组
    # arange([start,] stop[, step,], dtype=None) 其中start,step,dtype可以省略,分别是起始点、步长、和返回类型。
    array_arange = np.arange(5)     # 起始点0,结束点5,步长1,返回类型array,一维
    
    # linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    # endpoint: 为true,stop是最后一个样本。否则,它不包括在内。默认true。
    # retstep: 为true,则输出一个元组,元组第一个元素是生成的数列,第二个元素是步长
    array_lin = np.linspace(1, 10, 5, False, True, dtype=int)
    print(array_lin)
    
    c = np.random.rand(5, 5)        # 创建一个 5 × 5 的数组,值在0-1之间
    
    f = np.random.uniform(0, 100)   # 创建指定范围内的一个随机数
    i = np.random.randint(0, 100)   # 创建指定范围内的一个随机整数
    
    d = np.random.normal(2, 10, (2, 3))
    
    # 对于一维数组来说,python原生的list和numpy的array的切片操作都是相同的。
    # 对于多维数组,切片的数组必须是规则的
    # [行起始索引:行结束索引, 列起始索引:列结束索引]
    # 包含起始索引,不包含结束索引
    slice_arr1 = b[1, :]            # 取第 1 行数据
    slice_arr2 = b[1:3, :]          # 取第 1 行到第 3 行的数据,不包含第 3 行
    # M 为行数,N为列数
    slice_arr3 = b[:, 1]            # 取第 1 列的数据,以 1 × N 数组形式返回
    slice_arr4 = b[:, :2]           # 取第 0 列的数据,以 M × 2 数组形式返回
    
    slice_arr5 = b[1:2, 1:3]        # 取第 1 - 2行(不含第2行),第 1 - 3 列(不含第3列)的矩阵数据
    复制代码

    三、NumPy计算

    复制代码
    import numpy as np
    
    a = [[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]
    b = np.array(a)
    
    c = b > 80  # 条件判断
    d = np.where(b < 80, '差', '优')  # 三目运算
    
    vmax = np.amax(b)             # 最大值
    colMax = np.amax(b, axis=0)   # 每一列的最大值
    rowMax = np.amax(b, axis=1)   # 每一行的最大值
    
    vmin = np.amin(b)             # 最小值
    colMin = np.amin(b, axis=0)   # 每一列的最小值
    rowMin = np.amin(b, axis=1)   # 每一行的最小值
    
    vmean = np.mean(b)            # 平均值
    colmean = np.mean(b, axis=0)  # 每一列的平均数
    rowmean = np.mean(b, axis=1)  # 每一行的平均数
    
    vstd = np.std(b)              # 方差
    colstd = np.std(b, axis=0)    # 每一列的方差
    rowstd = np.std(b, axis=1)    # 每一行的方差
    
    b[:, 0] = b[:, 0] + 5         # 结合切片理解,所有行、第0列,加5
    复制代码

    四、 数据读写

    复制代码
    import numpy as np
    
    src = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
    
    # save 和 load 以NumPy专用的二进制格式保存数据,它们会自动处理元素类型和形状等信息
    # 如果文件路径末尾没有扩展名.npy或者是其他扩展名,该扩展名会被自动加上。
    np.save('a', src)
    a = np.load('a.npy')
    print(a)
    
    # savez用于将多个数组保存到一个文件中,扩展名为.npz
    # .npz是一个压缩文件
    # 非关键字参数传递的数组会自动起名为arr_0, arr_1...
    # load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容
    srcB = [[10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]
    srcC = [[20, 21, 22, 23, 24], [25, 26, 27, 28, 29]]
    np.savez('aa', src, srcB, C=srcC)
    aa = np.load("aa.npz")
    print(aa['arr_0'])
    print(aa['arr_1'])
    print(aa['C'])
    
    # loadtxt 和 savetxt 可以读写1维和2维的数组
    np.savetxt("b.txt", src)  # 缺省按照'%.18e'格式保存数据,以空格分隔
    b = np.loadtxt("b.txt")
    
    np.savetxt("b.txt", src, fmt='%d', delimiter=',')   # 整型,以逗号分隔
    b = np.loadtxt("b.txt", delimiter=',')              # load时也要指定为逗号分隔
    复制代码

    五、 矩阵操作

    复制代码
    import numpy as np
    
    a = np.array([[1, 2], [3, 4], [5, 6]])
    b = np.array([[10, 20], [30, 40], [50, 60]])
    
    c = np.vstack((a, b))   # [[1, 2], [3, 4], [5, 6], [10, 20], [30, 40], [50, 60]] 列数必须相同
    d = np.hstack((a, b))   # [[1, 2, 10, 20], [3, 4, 30, 40], [5, 6, 50, 60]]       行数必须相同
  • 相关阅读:
    MOSS 2013研究系列动态修改WebConfig(上) 欧阳锋
    MOSS 2013研究系列MOSS 2013安装篇 欧阳锋
    GPIO
    [转]vi/vim使用进阶: 在VIM中使用GDB调试 – 使用pyclewn
    建立openwrt虚拟环境
    ebtables基本使用
    LFS小记
    Autoconf & Automake使用小记
    Packet Filter小记
    Web技术整理
  • 原文地址:https://www.cnblogs.com/nanguajiejie/p/10519641.html
Copyright © 2011-2022 走看看