• python科学计算库-numpy


    一、numpy

    用NumPy快速处理数据

    NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
    矩阵运算

     jupyter快捷键

     1、ndarray 对象

    ndarray 实际上是多维数组的含义。

    在 NumPy 数组中,维数称为秩(rank),一维数组 的秩为
    1,二维数组的秩为 2,以此类推。在 NumPy 中,每一个线性的数组称为一个轴 (axes),其实秩就是描述轴的数量。

    创建数组

    # 引入numpy模块
    import numpy as np
    # 创建二维数组
    array = np.array([[1,2,3],[4,5,6]])
    print(array,type(array))
    
    [[1 2 3]
     [4 5 6]] <class 'numpy.ndarray'>

    获取数组属性值

    # ndim 维度的数量
    print('维度的数量',array.ndim)
    # 维度
    print('维度',array.shape)
    # 数组元素的个数
    print('数组元素的个数',array.size)
    # 对象元素的类型
    print('对象元素的类型',array.dtype)
    # 对象每个元素的大小、以字节为单位
    print('对象每个元素的大小、以字节为单位',array.itemsize)
    # 对象内存信息
    print(' 对象内存信息',array.flags)

    特殊函数创建

    关键字 
    array:创建数组
    dtype:指定数据类型
    zeros:创建数据全为0
    ones:创建数据全为1
    empty:创建数据接近0
    arange:按指定范围创建数据
    linspace:创建线段

    # 创建全零数组
    # 数据全为0,3行4列 
    # 默认为float
    a = np.zeros((3,4))
    print(a)
    print(a.dtype)
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    float64
    
    
    # 创建全为1的数组, 同时也能指定这些特定数据的 dtype:
    a = np.ones((3,4),dtype=np.int)
    print(a)
    print(a.dtype)
    [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]
    int32
    
    # 创建全空数组, 其实每个值都是接近于零的数:
    a = np.empty((3,4))
    print(a)
    print(a.dtype)
    
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    float64
    
    # 用 arange 创建连续数组:
    # 10-19 的数据,2步长  arange用来创建数组
    a = np.arange(10,20,2)
    print(a)
    print(a.dtype)
    
    [10 12 14 16 18]
    int32
    
    
    # 使用 reshape 改变数据的形状
    # 3行4列 ,0到11
    a = np.arange(12).reshape((3,4))
    print(a)
    print(a.dtype)
    
    
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    int32
    
    
    # 用 linspace 创建线段型数据:
    # 开始端为1 ,结束端10,且分割成20个数据,生成线段
    a = np.linspace(1,10,20)
    print(a)
    print(a.dtype)
    View Code

    结构数组

    # 结构数组
    import numpy as np
    # 定义数组结构
    # persontype = np.dtype({
    # 'names':['name', 'age', 'chinese', 'math', 'english'],
    # 'formats':['S32','i', 'i', 'i', 'f']})
    
    # 也可以这样定义
    persontype = np.dtype(
    [('name','S32'),( 'age','i'), ('chinese','i'), ('math','i'), ('english','i')]
    )
    
    
    peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
    ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
    dtype=persontype)
    print(peoples)
    ages = peoples[:]['age']
    chineses = peoples[:]['chinese']
    maths = peoples[:]['math']
    englishs = peoples[:]['english']
    print(np.mean(ages))
    print(np.mean(chineses))
    print(np.mean(maths))
    print(np.mean(englishs))
    28.25
    77.5
    93.25
    93.5

    创建随机数组

    random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。

    指定范围和形状的随机浮点数数组

     数组的数据类型

     算数运算

    通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。
    # 通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。
    
    x1 = np.arange(1,11,2)
    x2 = np.linspace(1,9,5)
    print('x1:',x1)
    print('x2:',x2)
    print(np.add(x1, x2))
    print(np.subtract(x1, x2))
    print(np.multiply(x1, x2))
    print(np.divide(x1, x2))
    print(np.power(x1, x2))
    print(np.remainder(x1, x2))
    
    x1: [1 3 5 7 9]
    x2: [1. 3. 5. 7. 9.]
    [ 2.  6. 10. 14. 18.]
    [0. 0. 0. 0. 0.]
    [ 1.  9. 25. 49. 81.]
    [1. 1. 1. 1. 1.]
    [1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05
     3.87420489e+08]
    [0. 0. 0. 0. 0.]

    在取余函数里,你既可以用 np.remainder(x1, x2),也可以用 np.mod(x1, x2),结果是一
    样的。

    ndarray数组运算

    (1)数组与标量之间的运算作用于数组的每一个元素

    a = np.arange(24).reshape(6,4)
    print(a+1)
    print(a*10)

    # 计算A^2+B^2
    import numpy as np
    A=[1,2,3]
    B=[4,5,6]
    a1 = np.array(A)
    a2 = np.array(B)
    a1**2+a2**2

    --------------------------------------------------------------------------------------------

    统计函数

    最大值、最小值、平均值,是否符合正态分布,方差、标准差多少等等。它们可以让你更清楚地对这组数据有认知。

     计数组 / 矩阵中的最大值函数 amax(),最小值函数 amin()

    import numpy as np
    a = np.array([[1,2,3], [4,5,6], [7,8,9]])
    print(np.amin(a))
    print(np.amin(a,0))
    print(np.amin(a,1))
    print(np.amax(a))
    print(np.amax(a,0))
    print(np.amax(a,1))
    对于一个二维数组 a,amin(a) 指的是数组中全部元素的最小值,

    amin(a,0) 是延着 axis
    =0 轴的最小值,axis=0 轴是把元素看成了 [1,4,7], [2,5,8], [3,6,9] 三个元素,所以最小值为 [1,2,3],


    amin(a,1) 是延着 axis=1轴的最小值,
    axis
    =1 轴是把元素看成了 [1,2,3], [4,5,6], [7,8,9] 三个元素,所以最小值为 [1,4,7]。

    同理 amax() 是计算数组中元素沿指定轴的最大值。

    统计最大值与最小值之差 ptp()

    a = np.array([[1,2,3], [4,5,6], [7,8,9]])
    print(np.ptp(a))
    print(np.ptp(a,0))
    print(np.ptp(a,1))

    统计数组的百分位数 percentile()

    a = np.array([[1,2,3], [4,5,6], [7,8,9]])
    print(np.percentile(a, 50))
    print(np.percentile(a, 50, axis=0))
    print(np.percentile(a, 50, axis=1))
    同样,percentile() 代表着第 p 个百分位数,这里 p 的取值范围是 0-100,如果 p=0,
    那么就是求最小值,如果 p=50 就是求平均值,如果 p=100 就是求最大值。同样你也可
    以求得在 axis=0 和 axis=1 两个轴上的 p% 的百分位数。

    统计数组中的中位数 median()、平均数 mean()

    a = np.array([[1,2,3], [4,5,6], [7,8,9]])
    # 求中位数
    print(np.median(a))
    print(np.median(a, axis=0))
    print(np.median(a, axis=1))
    # 求平均数
    print(np.mean(a))
    print(np.mean(a, axis=0))
    print(np.mean(a, axis=1))

    统计数组中的加权平均值 average()

    a = np.array([1,2,3,4])
    wts = np.array([1,2,3,4])
    print(np.average(a))
    print(np.average(a,weights=wts))
    average() 函数可以求加权平均,加权平均的意思就是每个元素可以设置个权重,默认情
    况下每个元素的权重是相同的,所以 np.average(a)=(1+2+3+4)/4=2.5,你也可以指定
    权重数组 wts=[1,2,3,4],这样加权平均 np.average(a,weights=wts)=
    (1*1+2*2+3*3+4*4)/(1+2+3+4)=3.0。

    统计数组中的标准差 std()、方差 var()

    a = np.array([1,2,3,4])
    print(np.std(a))
    print(np.var(a))

    NumPy 排序

     

    a = np.array([[4,3,2],[2,4,1]])
    print(np.sort(a))
    print()
    print(np.sort(a, axis=None))
    print()
    print(np.sort(a, axis=0))
    print()
    print(np.sort(a, axis=1))

     求和sum

    # 求和
    a2 = np.arange(24).reshape(4,6)
    a2
    print(a2.sum())#整体求和
    print(a2.sum(axis=0))#对纵向求和
    print(a2.sum(axis=1))#对横向求和

  • 相关阅读:
    error while loading shared libraries: xxx.so.x"错误的原因和解决办法
    玩转html5(三)---智能表单(form),使排版更加方便
    玩转html5(二)----用canvas结合脚本在画布上画简单的图(html5又一强大功能)
    设计模式 命令模式 之 管理智能家电
    Android Volley 之自定义Request
    玩转html5(一)-----盘点html5新增的那些酷酷的input类型和属性
    玩转Web之servlet(五)---- 怎样解决servlet的线程安全问题
    Android 完美实现图片圆角和圆形(对实现进行分析)
    Android SwipeRefreshLayout 官方下拉刷新控件介绍
    scala akka基础编程
  • 原文地址:https://www.cnblogs.com/foremostxl/p/11863209.html
Copyright © 2020-2023  润新知