zoukankan      html  css  js  c++  java
  • Numpy

    0. NumPy介绍

      NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray。
      引入numpy,并重命名为np,方便使用
      import numpy as np

    1. 创建数组

    • 1.1使用numpy内置的array函数创建数组

      • 创建一维数组
      arr1 = np.array([1,2,3])
      print(type(arr1))
      print(arr1)
      测试结果:

      <class 'numpy.ndarray'>

      [1 2 3]

      • 创建二维数组
      arr2 = np.array([[1,2,3],[4,5,6]])
      print(arr2)
      测试结果:

      [[1 2 3]
      [4 5 6]]

    • 1.2使用arange函数创建数组

      • 使用arange函数创建包含0到9 十个数字的一维数组
      #注意:arange函数返回的数组默认第一个元素是0,结束元素是指定的数值前一个数字9
      arr_1 = np.arange(10)
      print(arr_1)
      测试结果:

      [0 1 2 3 4 5 6 7 8 9]

      • 通过arange函数设置“开始、结束、步长”三个参数创建包含1到10所有奇数的一维数组
      #从1开始,到10前一位结束,步长为2表示相邻两个元素的差值是2
      arr_2 = np.arange(1,10,2)
      print(arr_2) 
      测试结果:

      [1 3 5 7 9]

    • 1.3全0、全1数组zeros,ones

      • 使用zeros函数创建一个包含10个全0数字的一维数组
      • 使用ones函数创建一个包含5个全1数字的一维数组
      • 创建3行4列全1二维数组
      z1 = np.zeros(10)
      print(z1)
      o1 = np.ones(5)
      print(o1)
      o2 = np.ones((3,4))
      print(o2)
      测试结果:

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

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

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

    • 1.4通过genfromtxt函数从文件导入生成数组

    test.txt文件
    aa,bb,cc
    11,22,33
    - ```dtype```是数组类型,```delimiter```以什么分割
    text = np.genfromtxt('text.txt',dtype=str,delimiter=',')
    print(type(text))
    print(text)
    测试结果:

    <class 'numpy.ndarray'>

    [['aa' 'bb' 'cc']
    ['11' '22' '33']]

    2. 数组的属性方法

    • 2.1 查看数组维度shape

      • 查看o2各维度的大小
      • 查看o2第1维的大小(行数)
      • 查看o2第2维的大小(列数)
      o2 = np.ones((3,4))
      #运行结果是一个元组(3,4)表示第1维的大小是3(也是就是3行),第2维的大小是4(也就是4列)
      print(o2.shape)
      print(o2.shape[0])
      print(o2.shape[1])
      测试结果:

      (3, 4)

      3

      4

    • 2.2元素类型及转换dtype,astype

      • 查看数组中元素类型
      • 类型转换函数
      print(o2.dtype)
      #类型转换函数astype,数组元素由float64类型转换成int32类型,并返回一个新的数组o2_1,原数组o2元素类型不变
      o2_1 = o2.astype(np.int32)
      #o2数组类型不变
      print(o2.dtype)
      #o2_1数组中元素类型为int32
      print(o2_1.dtype)
      测试结果:

      float64

      float64

      int32

    #创建字符串类型数组,dtype('<U5')表示字符串不超过5位
    arr_string = np.array(["12.78","23.15","34.5"])
    print(arr_string.dtype)
    #将字符串数组转换成浮点类型数组
    arr_float = arr_string.astype(np.float64)
    print(arr_float.dtype)
    print(arr_float)
    #float类型数组转换成整型数组,小数部分将会被截断
    arr_int = arr_float.astype(np.int32)
    print(arr_int.dtype)
    print(arr_int)
    #numpy自动识别元素类型
    print(np.array([1, 2, 3]).dtype)
    测试结果:

    <U5

    float64

    [12.78 23.15 34.5 ]

    int32

    [12 23 34]

    int32

    3. 索引与切片

    • 3.1一维数组索引与切片

    #创建一维数组
    arr1d = np.arange(10)
    print(arr1d)
    #数组的索引从0开始,通过索引获取第三个元素
    print(arr1d[2])
    #切片,左闭右开区间,从索引3开始,直到索引7结束
    print(arr1d[3:8])
    #数组脚标由右往左是从-1开始,每向左一位脚标数字减1,获取最后一个元素,等价arr1d[9]
    print(arr1d[-1])
    #将标量赋值给切片,会广播到切片的整个选区
    arr1d[3:5] = 10
    print(arr1d)
    测试结果:

    [0 1 2 3 4 5 6 7 8 9]

    2

    [3 4 5 6 7]

    9

    [ 0 1 2 10 10 5 6 7 8 9]

    • 3.2二维数组索引与切片

    #创建二维数组
    arr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    print(arr2d)
    #第一维脚标(索引值)是0的元素是一个数组
    print(arr2d[0])
    #第一维脚标(索引值)是1,第二维脚标(索引值)是3的元素,可以理解为获取二维数组中第2行第4列的元素
    print(arr2d[1, 3])
    #截取到二维数组的第二个元素
    print(arr2d[:2])
    #只有冒号表示选取整个行轴的元素,竖轴从脚标1取到脚标3的前一位,可以理解为取所有行的第2列和第3列数据
    print(arr2d[:, 1:3])
    #沿着第行轴方向从脚标1开始取到最后,竖轴从脚标1开始取到3的前一位
    print(arr2d[1:, 1:3])
    测试结果:

    [[ 1 2 3 4]
    [ 5 6 7 8]
    [ 9 10 11 12]]

    [1 2 3 4]

    8
    [[1 2 3 4]
    [5 6 7 8]]

    [[ 2 3]
    [ 6 7]
    [10 11]]

    [[ 6 7]
    [10 11]]

    4. 数组的运算

    • 4.1转置(行转列,列转行)

    #reshape(shape)函数改变数组形状,shape是一个元组,表示数组的形状
    #创建一个包含15个元素的一维数组,通过reshape函数调整数组形状为3行5列的二维数组
    arr = np.arange(15).reshape((3,5))
    print(arr)
    
    #转置,数组转置可以使用transpose方法或者T属性,转置返回的是源数组的视图,不会进行任何复制操作
    #将3行5列的二维数组arr转置为5行3列的二维数组
    print(arr.transpose())
    
    #使用T属性实现转置
    print(arr.T)
    
    #注意:转置过后是生成新数组
    print(arr)
    测试结果:

    [[ 0 1 2 3 4]
    [ 5 6 7 8 9]
    [10 11 12 13 14]]

    [[ 0 5 10]
    [ 1 6 11]
    [ 2 7 12]
    [ 3 8 13]
    [ 4 9 14]]

    [[ 0 5 10]
    [ 1 6 11]
    [ 2 7 12]
    [ 3 8 13]
    [ 4 9 14]]

    [[ 0 1 2 3 4]
    [ 5 6 7 8 9]
    [10 11 12 13 14]]

    • 4.2数组与标量算术运算

    arr1 = np.array([[1,2,3],[4,5,6]])
    #对数组中每个元素求平方
    print(arr1 ** 2)
    
    #数组arr1中的每个元素加10
    print(arr1 + 10)
    测试结果:

    [[ 1 4 9]
    [16 25 36]]

    [[11 12 13]
    [14 15 16]]

    • 4.3算术运算

      • 注意:两个数组做算数法要求两个数组的结构要相同
    #数组加法,两个数组对应位置的元素相加
    arr1 = np.array([[1,2,3],[4,5,6]])
    arr2 = np.ones((2,3))
    print(arr1 + arr2 )
    
    #数组减法,两个数组对应位置的元素相减
    print(arr1 - arr2)
    
    #数组乘法,两个数组对应位置的元素相乘
    arr3 = np.array([[2,2,2],[2,2,2]])
    print(arr1 * arr3)
    
    #使用tile函数构造数组,上一个arr3构造具有相同元素的数组非常麻烦,使用tile函数非常简洁
    #第1个参数表示需要复制的数组,第二个参数是对应的轴方向上复制的次数
    #第2个参数(2,3)表示在第0轴(行)方向复制2次,第1轴(竖)方向复制3次,这样就构成了一个2行3列的二维数组
    arr4 = np.tile([2],(2,3))
    print(arr4)
    
    #数组除法,两个数组对应位置的元素相除
    print(arr1 / arr4)
    测试结果:

    [[2. 3. 4.]
    [5. 6. 7.]]

    [[0. 1. 2.]
    [3. 4. 5.]]

    [[ 2 4 6]
    [ 8 10 12]]

    [[2 2 2]
    [2 2 2]]

    [[0.5 1. 1.5]
    [2. 2.5 3. ]]

    5. 常用统计方法

    • 5.1使用sum函数对数组中全部或者某轴向的元素求和

      • 沿着第0轴方向求和arr1.sum(axis=0)
      • 简写arr1.sum(0)
      • 沿着第1轴方向求和arr1.sum(axis=1)
      • 简写arr1.sum(1)
    arr1 = np.array([[1,2,3],[4,5,6]]) # 2行3列二维数组
    #数组中全部元素求和
    print(arr1.sum())
    
    #沿着第0轴方向求和arr1.sum(axis=0)
    #简写arr1.sum(0)
    print(arr1.sum(0))
    #沿着第1轴方向求和arr1.sum(axis=1)
    #简写arr1.sum(1)
    print(arr1.sum(1))
    测试结果:

    21

    [5 7 9]

    [ 6 15]

    • 5.2算术平均数mean函数

    arr1 = np.array([[1,2,3],[4,5,6]]) # 2行3列二维数组
    #求数组中全部元素的算术平均数
    print(arr1.mean())
    
    #沿第0轴方向求算术平均数
    print(arr1.mean(0))
    
    #沿第1轴方向求算术平均数
    print(arr1.mean(1))
    测试结果:

    3.5

    [2.5 3.5 4.5]

    [2. 5.]

    • 5.3最大最小值mx,min函数

    arr1 = np.array([[1,2,3],[4,5,6]]) # 2行3列二维数组
    #全部元素最大值
    print(arr1.max())
    
    #全部元素最小值
    print(arr1.min())
    
    #沿第0轴方向最大值
    print(arr1.max(0))
    
    #沿第0轴方向最小值
    print(arr1.min(0))
    
    #沿第1轴方向最大值
    print(arr1.max(1))
    
    #沿第1轴方向最小值
    print(arr1.min(1))
    测试结果:

    6

    1

    [4 5 6]

    [1 2 3]

    [3 6]

    [1 4]

  • 相关阅读:
    CSS躬行记(9)——网格布局
    CSS躬行记(8)——裁剪和遮罩
    CSS躬行记(7)——合成
    CentOS 系统目录解析
    Linux 命令快捷键
    秒的精确度
    Oracle和mysql中装逼dual表的用途介绍
    mysql 的mgr集群
    ansible笔记
    cygwin
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11214579.html
Copyright © 2011-2022 走看看