NumPy学习笔记

NumPy简介

NumPy:Numerical Python,是python进行科学计算的一个基础包。

NumPy的数据结构

ndarry:N-dimensional array,一种由相同类型的元素组成的多维数组对象。

  1. 元素的数据类型由dtpye(data-type)对象来指定,每个ndarry只有一种dtype类型。
  2. 大小固定,创建好数组时一旦指定好大小,不会再发生改变

ndarry的创建

  • array函数:将序列转换成ndarry

    //通过array函数创建
    data1 = [0,1,2,3,1.1]
    arr1 = np.array(data1)
    

    运行结果:

    array([0. , 1. , 2. , 3. , 1.1])
    

    嵌套序列创建:

    //通过嵌套序列创建
    data2 = [[1,2,3],[4,5,6]]
    arr2 = np.array(data2)
    

    运行结果:

    array([[1, 2, 3],
    [4, 5, 6]])
    
  • zeros函数:创建指定长度的全零数组

    np.zeros(10)
    

    运行结果:

    array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    

    创建多维:

    np.zeros((3,4))
    

    运行结果:

    array([[0., 0., 0., 0.],
     [0., 0., 0., 0.],
     [0., 0., 0., 0.]])
    
  • ones函数:创建指定长度的全1数组

    np.ones(10)
    

    运行结果:

    array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
    

    创建多维:

    np.ones((2,3))
    

    运行结果:

    array([[1., 1., 1.],
          [1., 1., 1.]])
    
  • empty函数:创建一个没有具体值的数组,通常都是一些未初始化的垃圾值
    np.empty(5)
    
    运行结果:
    array([0. , 1. , 2. , 3. , 1.1])
    
    创建多维:
    np.empty((2,2,3))
    
    运行结果:
    array([[[0., 0., 0.],
          [0., 0., 0.]],
          [[0., 0., 0.],
          [0., 0., 0.]]])
    
  • arange函数:类似range函数,通过开始值、终值和步长创建数组。创建的数组不包含终值值。
    np.arange(10)
    
    运行结果:
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    根据起始值,步长创建:
    np.arange(1,10,1)
    
    运行结果:
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    
  • linspace函数:通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值
    np.linspace(1,10,5)
    
    运行结果:
    array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])
    
  • logspace函数:和linspace类似,用来创建等比数列
    np.logspace(0,2,5)
    
    运行结果:
    array([ 10.        ,  17.7827941 ,  31.6227766 ,  56.23413252,
             100.        ])
    
  • random函数:随机创建数组

    np.random.random(10)
    

    运行结果:

    array([0.60751347, 0.29262802, 0.48379076, 0.06987773, 0.09515098,
           0.1943465 , 0.46335728, 0.46320678, 0.81314993, 0.51329606])
    

    通过设置参数创建:

    np.random.random((2,2,3))
    

    运行结果:

    array([[[0.06608054, 0.55363782, 0.62406291],
          [0.77318127, 0.58557065, 0.17148664]],
    
          [[0.79126153, 0.83586225, 0.59518475],
          [0.60087036, 0.13638575, 0.7900084 ]]])
    

ndarry的属性

  • ndim:维度数量
    arr1.ndim
    
    运行结果:
    1
    
  • shape:表示各维度大小的元组
    arr2.shape
    
    运行结果:
    (2, 3)
    
  • dtype:元素数据类型
    arr2.dtype
    
    运行结果:
    dtype('int32')
    
  • size:元素总个数m*n
    arr2.size
    
    运行结果:
    6
    

ndarry的数据类型

创建数组时,可以通过dtype显式指定数据类型,如不指定NumPy会根据数据默认指定。例:

data3 = np.array([1,2,3,4,5])
data3.dtype

运行结果:

dtype('int32')

astype函数:数据类型转换

data4 = data3.astype(float)
data4.dtype

运行结果:

dtype('float64')

数组与标量、数组直接的运算

  • 矢量化:不需要编写循环,可实现对数据的批量计算。性能上比Python快一两个数量级,大小相等的任何算术运算都会应用到元素级。
  1. 数组与标量之间的运算

    arr1 = np.array([1,2,3,4,5])
    arr1+2
    

    运行结果:

    array([3, 4, 5, 6, 7])
    

    除法运算:

    from __future__ import division
    1/arr1
    

    运行结果:

    array([1.        , 0.5       , 0.33333333, 0.25      , 0.2       ])
    
  2. 大小相等数组之间的运算

    arr2 = ([5,6,7,8,9])
    arr1+arr2
    

    运行结果:

    array([ 6,  8, 10, 12, 14])
    

    例1

    arr3 = np.array([[1,2,3],[4,5,6]])
    arr4 = np.array([[1,2,3],[4,5,6]])
    arr3 + arr4
    

    运行结果:

    array([[ 2,  4,  6],
           [ 8, 10, 12]])
    

    例2

    arr3 - arr4
    

    运行结果:

    array([[0, 0, 0],
        [0, 0, 0]])
    

    例3

    arr3 * arr4
    

    运行结果:

    array([[ 1,  4,  9],
           [16, 25, 36]])
    

    例4

    arr3 / arr4 
    

    运行结果:

    array([[1., 1., 1.],
    [1., 1., 1.]])
    
  3. 数组的矩阵积
  • 矩阵积:不是元素级的运算,两个二维(多维)矩阵,第一个矩阵的列数与第二个矩阵的行数相同,可以进行矩阵乘法,即矩阵积。

    设A为的m×p的矩阵,B为p×n的矩阵,那么称m×n的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i行第j列元素可以表示为:
    

    DgJKD.png

    arr1 = np.array([[1,2,3],[1,2,3]])
    arr2 = np.array([[1,2],[1,1],[2,1]])
    arr1.dot(arr2)
    

    运行结果:

    array([[9, 7],
           [9, 7]])
    
0%