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

    创建ndarray数组:

    import numpy as np 
    np.array([2,3]) #创建一个2行3列的一维ndarray数组
    

    常用属性

    • T 数组的转置(对高维数组而言)
    • dtype 数组元素的数据类型
    • size 数组元素的个数
    • ndim 数组的维数
    • shape 数组的维度大小(以元组形式)

    数据类型dtype:
    bool_ , int(8, 16,32,64), uint(8, 16,32,64), float(16,32,64)
    类型转换: astype()

    创建ndarray:

    • array() 将列表转换为数组,可选择显式指定dtype
    • arange() range的numpy版,支持浮点数
    • linspace() 类似arange(),第三个参数为数组长度
    • beros() 根据指定形状和dtype创建全0数组
    • ones() 根据指定形状和dtype创建全1数组
    • empty() 根据指定形状和dtype创建空数组(随机值)
    • eye() 根据指定边长和dtype创建单位矩阵

    numpy索引和切片

    数组和标量之间的运算

    a+1	a*3	 1//a	 a ** 0.5
    

    2.同样大小数组之间的运算

    a+b		a/b		a**b
    

    数组的索引

    a[5]		a2[2][3]		a2[2,3]
    

    数组的切片

    a[5:8]		a[:3] = 1		a2[1:2, :4]		a2[:,:1]		a2[:,1]
    

    与列表不同,数组切片时并不会自动复制,在切片数组上的修改 会影响原数组。
    [解决方法: copy()]

    原:b=a[:4] 	解决:b= a[:4].copy()
    b[-1] = 250
    

    numpy布尔型索引

    问题1: 给一个数组,选出数组中所有大于5的数。
    答案: a[a>5]
    原理:

    1. a> 5会对a中的每一一个元素进行判断,返回一个布尔数组
    2. 布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组

    问题2: 给一个数组,选出数组中所有大于5的偶数。
    问题3: 给一个数组,选出数组中所有大于5的数和偶数。
    答案:

    a[(a>5) & (a%2==0)]
    a[(a>5) | (a%2==0)]
    

    numpy花式索引*

    问题1: 对于-一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。
    答案: a[[1,3,4,6,7]]
    问题2: 对一个二维数组,选出其第一列和第三列,组成新的二维数组。
    答案: a[:,[1,3]]

    numpy通用函数

    【定义】通用函数:能同时对数组中所有元素进行运算的函数
    常见通用函数:
    一元函数(传1个数组): abs, sqrt, exp, log, ceil(向上取整), floor(向下取整), rint/round(四舍五入), trunc(向零取整),modf, isnan, isinf, cos, sin, tan
    二元函数(传2个数组): add(加), substract(减), multiply(乘), divide(除), power(乘方), mod(取余),maximum, mininum,

    #一元:向上取整ceil,向下取整floor
    import numpy as np
    np.ceil(3.1) #结果:4.0
    np.floor(3.9) #结果:3.0
    #对应python内置math
    import math
    math.ceil(3.1) #结果4
    math.floor(3.9) #结果3
    

    numpy通用函数数组的用法

    >>> import numpy as np
    #==================【一元:向上取整ceil,向下取整floor】==============
    #-----------------------【ceil函数】-------------------------------
    >>> a=np.arange(0,5,0.2)
    >>> a
    array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4,
           2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2, 4.4, 4.6, 4.8])
    >>> np.ceil(a)
    array([0., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 3., 3., 3., 3., 3., 4.,
           4., 4., 4., 4., 5., 5., 5., 5.])
    #----------------------【modf函数】----------------------------------
    >>> a,b=np.modf(a)
    >>> a
    array([0. , 0.2, 0.4, 0.6, 0.8, 0. , 0.2, 0.4, 0.6, 0.8, 0. , 0.2, 0.4,
           0.6, 0.8, 0. , 0.2, 0.4, 0.6, 0.8, 0. , 0.2, 0.4, 0.6, 0.8])
    >>> b
    array([0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 3., 3.,
           3., 3., 3., 4., 4., 4., 4., 4.])
    #--------------------【isnan和isinf】--------------------------
    #首先看如下运算【isinf】:
    >>> a=np.array([0,1,2,3,4,5])
    >>> b=np.array([5,4,3,2,1,0])
    >>> c=a/b  
    >>> c
    #因为被除数有个0,所以会有个警告
    __main__:1: RuntimeWarning: divide by zero encountered in true_divide
    #inf表示无限大(infinity)即5/0=inf,考虑微积分情形
    array([0.        , 0.25      , 0.66666667, 1.5       , 4.        ,      inf]) 
    
    #再看如下运算【isnan】:
    >>> d=np.array([0,1,2])
    >>> e=np.array([0,1,2])
    >>> f=d/e
    >>> f
    #0/0不是数,所以出现警告,nan
    __main__:1: RuntimeWarning: invalid value encountered in true_divide
    array([nan,  1.,  1.])
    
    #【isnan和isinf使用:判断是否含有非数(0/0),和无限大数(5/0)】
    >>> f
    array([nan,  1.,  1.])
    >>> c
    array([0.        , 0.25      , 0.66666667, 1.5       , 4.        ,       inf])
    >>> np.isnan(f)
    array([ True, False, False])
    >>> np.isinf(c)
    array([False, False, False, False, False,  True])
    
    #【返回非数、无限大数】~表示非
    >>> ~np.isinf(c)
    array([ True,  True,  True,  True,  True, False])
    >>> ~np.isnan(f)
    array([False,  True,  True])
    
    #-----------【maxinum/mininum】---------
    >>> a=np.arange(0,9,1)
    >>> b=np.arange(10,19,1)
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8])
    >>> b
    array([10, 11, 12, 13, 14, 15, 16, 17, 18])
    >>> np.maximum(a,b)#两个数组对比取大的
    array([10, 11, 12, 13, 14, 15, 16, 17, 18])
    

    numpy常用函数

    一、numpy数学和统计学方法:

    1. sum:求和
    2. cumsum:求累计和
    3. mean:求平均数
    4. std:求标准差
    5. var:求方差
    6. min:求最小值
    7. max:求最大值
    8. argmin:求最小值索引
    9. argmax :求最大值索引

    二、随机数生成

    1. rand:给定形状产生随机数组(0到1之间的数)
    2. randint:给定形状产生随机整数
    3. choice:给定形状产生随机选择
    4. shuffle:与random. shuffle相同 (打乱列表原有顺序)
    5. uniform:给定形状产生随机数组

    随机数示例:

    #==========python内置random==========
    >>> import random
    >>> a=np.arange(0,5,1)
    >>> a
    array([0, 1, 2, 3, 4])
    >>> random.shuffle(a)
    >>> a
    array([3, 0, 1, 4, 2])
    
    #==========【numpy random】==========
    #【np.random.rand()】
    >>> np.random.rand() #0-1间随机数
    0.8012219581827386
    >>> np.random.rand(10) #生成10个0-1间随机数
    array([0.80526841, 0.77220095, 0.40605223, 0.75310937, 0.69884484,
           0.5413281 , 0.53127462, 0.7825014 , 0.61354559, 0.66085711])
    #【np.random.randint】
    >>> np.random.randint(1,10) #生成1个  1-10间随机整数组
    2
    >>> np.random.randint(1,10,5) #生成5个 1-10间随机整数组
    array([2, 3, 5, 2, 5])
    >>> np.random.randint(1,10,(2,3)) #生成2行3列 1-10间随机 多维 整数组
    array([[2, 3, 7],
           [1, 9, 3]])
    
  • 相关阅读:
    LiteMDA中支持Generic的BusinessObjectFactory实现
    Domain Object Layer Design and Sample Code for LiteMDA
    [BuildRelease Management]FinalBuilder
    Java RMI之HelloWorld
    深入浅出之正则表达式[转]
    Linux中的sh+source+export
    Scrum资料收集
    [MySQL]安装和启动
    .NET Remoting之Helloworld
    [在windows上使用Unix工具]SUA+Interix+SFU+Utilities and SDK for UNIXbased Applications
  • 原文地址:https://www.cnblogs.com/chenxi188/p/11775795.html
Copyright © 2011-2022 走看看