zoukankan      html  css  js  c++  java
  • 编程实践(Numpy)上-学习笔记一(数据类型及数组创建)

    常量

    numpy.nan

    空值 nan=NaN=NAN 两个numpy.nan是不相等的

    numpy.inf

    表示正无穷大。Inf=inf=infty=Infinity=PINF

    numpy.pi

    表示圆周率

    numpy.e

    表示自然常数

    数据类型

    常见数据类型

    原生数据类型 int float bool str list dict
    numpy中 在类型名称末尾都加了“_”

    创建数据类型

    numpy的数值类型实际上是dtype对象的实例。

    数据类型信息

    python的浮点数通常是64位浮点数,几乎等同于np.float64。
    NumPy和Python整数类型的行为在整数溢出方面存在显著差异,与Numpy不同,Python的int是灵活的。这意味着Python整数可以扩展以容纳任何整数并且不会溢出。

    时间日期和时间增量

    datetime64 基础

    • datatime64是带单位的日期时间类型
      1秒 = 1000 毫秒(milliseconds)
      1毫秒 = 1000 微秒(microseconds)

    • 从字符串创建 datetime64 类型时,默认情况下,numpy 会根据字符串自动选择对应的单位。

    • 从字符串创建 datetime64 类型时,可以强制指定使用的单位。

    • 从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。

    • 使用arange()创建 datetime64 数组,用于生成日期范围。

    datetime64 和 timedelta64 运算

    • timedelta64 表示两个 datetime64 之间的差。timedelta64 也是带单位的,并且和相减运算中的两个 datetime64 中的较小的单位保持一致。

    • 生成 timedelta64时,要注意年('Y')和月('M')这两个单位无法和其它单位进行运算(一年有几天?一个月有几个小时?这些都是不确定的)

    • timedelta64的运算

    • numpy.datetime64 与 datetime.datetime 相互转换

    datetime64的应用

    numpy.busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None)

    • 将指定的偏移量应用于工作日,单位天('D')。计算下一个工作日,如果当前日期为非工作日,默认报错。可以指定 forward 或 backward 规则来避免报错。(一个是向前取第一个有效的工作日,一个是向后取第一个有效的工作日)

    numpy.is_busday(dates, weekmask='1111100', holidays=None, busdaycal=None, out=None)

    • 返回指定日期是否是工作日。

    • 统计一个 datetime64[D] 数组中的工作日天数。

    • 自定义周掩码值,即指定一周中哪些星期是工作日。

    numpy.busday_count(begindates, enddates, weekmask='1111100', holidays=[], busdaycal=None, out=None)

    • 返回两个日期之间的工作日数量。

    数组的创建

    numpy 提供的最重要的数据结构是ndarray,它是python中list的扩展。

    依据现有数据来创建narray

    • 通过array()函数创建
    • 通过asarray()函数创建
      array()和asarray()都可以将结构数据转化为 ndarray,但是array()和asarray()主要区别就是当数据源是ndarray 时,array()仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 asarray()不会。
      更改为较大的dtype时,其大小必须是array的最后一个axis的总大小(以字节为单位)的除数
    • 通过fromfunction()函数创建
      给函数绘图的时候可能会用到fromfunction(),该函数可从函数中创建数组。

    依据ones和zeros填充方式

    在机器学习任务中经常做的一件事就初始化参数,需要用常数值或者随机来创建一个固定大小的矩阵。

    • 零数组
      zeros()函数:返回给定形状和类型的零数组。
      zeros_like()函数:返回与给定数组形状和类型相同的零数组。
    • 1 数组
      ones()函数:返回给定形状和类型的1数组。
      ones_like()函数:返回与给定数组形状和类型相同的1数组。
    • 空数组
      empty()函数:返回一个空数组,数组元素为随机数。
      empty_like函数:返回与给定数组具有相同形状和类型的新数组。
    • 单位数组
      eye()函数:返回一个对角线上为1,其它地方为零的单位数组。
      identity()函数:返回一个方的单位数组。
    • 对角数组
      diag()函数:提取对角线或构造对角数组。
    • 常数数组
      full()函数:返回一个常数数组。
      full_like()函数:返回与给定数组具有相同形状和类型的常数数组。

    利用数值范围来创建ndarray

    • arange()函数:返回给定间隔内的均匀间隔的值。
    • linspace()函数:返回指定间隔内的等间隔数字。
    • logspace()函数:返回数以对数刻度均匀分布。
    • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。

    结构数组的创建

    先定义结构,然后利用np.array()来创建数组,其参数dtype为定义的结构。

    • 利用字典来定义结构
    • 利用包含多个元祖的列表来定义结构

    数组的属性

    方法:
    numpy.ndarray.ndim 用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。
    numpy.ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。
    numpy.ndarray.size 数组中所有元素的总量,相当于数组的shape中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。
    numpy.ndarray.dtype ndarray对象的元素类型。
    numpy.ndarray.itemsize 以字节的形式返回数组中每一个元素的大小。

    在ndarray中所有元素必须是同一类型,否则会自动向下转换,int->float->str。

    练习

    什么是numpy?

    numpy是Python科学计算的基础包,它是一个开源的Python扩展库
    【答案】numpy是python中基于数组对象的科学计算库。 提炼关键字,可以得出numpy以下三大特点: 拥有n维数组对象; 拥有广播功能(后面讲到); 拥有各种科学计算API,任你调用;

    如何安装numpy?

    用pip工具:pip install numpy;
    或者直接去网站下载镜像库再安装:pip install X://XXX/XXX-numpy-XX.X.X.whl

    什么是n维数组对象?

    就是个n维数组,ndarray类型
    【答案】n维数组(ndarray)对象,是一系列同类数据的集合,可以进行索引、切片、迭代操作。 numpy中可以使用array函数创建数组:

    如何区分一维、二维、多维?

    【答案】
    判断一个数组是几维,主要是看它有几个轴(axis)。
    一个轴表示一维数组,两个轴表示二维数组,以此类推。
    每个轴都代表一个一维数组。
    比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。

    以下表达式运行的结果分别是什么?
    (提示: NaN = not a number, inf = infinity)
    0 * np.nan
    np.nan == np.nan
    np.inf > np.nan
    np.nan - np.nan
    0.3 == 3 * 0.1

    nan
    False
    False
    nan
    False

    将numpy的datetime64对象转换为datetime的datetime对象。
    dt64 = np.datetime64('2020-02-25 22:10:10')
    【知识点:时间日期和时间增量】
    如何将numpy的datetime64对象转换为datetime的datetime对象?

    dt = dt64.astype(datetime.datetime)

    给定一系列不连续的日期序列。填充缺失的日期,使其成为连续的日期序列。
    dates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)
    【知识点:时间日期和时间增量、数学函数】
    如何填写不规则系列的numpy日期中的缺失日期?

    out = []
    for date, d in zip(dates, np.diff(dates)):
        out.extend(np.arange(date, date + d))
    fillin = np.array(out)
    output = np.hstack([fillin, dates[-1]])
    print(output)
    

    如何得到昨天,今天,明天的的日期
    【知识点:时间日期】
    (提示: np.datetime64, np.timedelta64)

    yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
    today     = np.datetime64('today', 'D')
    tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
    

    创建从0到9的一维数字数组。
    【知识点:数组的创建】
    如何创建一维数组?

    ar = np.arange(0,10)

    创建一个元素全为True的 3×3 数组。
    【知识点:数组的创建】
    如何创建一个布尔数组?

    ar = np.full([3,3],True)
    【答案】np.full([3,3],True,dtype=np.bool)

    创建一个长度为10并且除了第五个值为1的空向量
    【知识点:数组的创建】
    (提示: array[4])

    arr = np.zeros(10)
    arr[4] = 1
    

    创建一个值域范围从10到49的向量
    【知识点:创建数组】
    (提示: np.arange)

    np.arange(10,50)

    创建一个 3x3x3的随机数组
    【知识点:创建数组】
    (提示: np.random.random)

    np.random.random([3,3,3])

    创建一个二维数组,其中边界值为1,其余值为0
    【知识点:二维数组的创建】
    (提示: array[1:-1, 1:-1])

    创建长度为10的numpy数组,从5开始,在连续的数字之间的步长为3。
    【知识点:数组的创建与属性】
    如何在给定起始点、长度和步骤的情况下创建一个numpy数组序列?

    np.arange(5,5+3*10,3)

    将本地图像导入并将其转换为numpy数组。
    【知识点:数组的创建与属性】
    如何将图像转换为numpy数组?

    import numpy as np
    from PIL import Image
    
    img1 = Image.open('test.jpg')
    a = np.array(img1)
    print(a.shape,a.dtype)
    

    参考:https://github.com/datawhalechina/team-learning-program/tree/master/IntroductionToNumpy/task01 数据类型及数组创建

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    谈Delphi中SSL协议的应用(好多相关文章)
    DELPHI中IDE宏录制小用
    SQLite数据库的体系结构(翻译自sqlite.org)
    NewPascal(也许只是对FreePascal的一种封装)
    Loongnix 系统(MIPS Linux)
    死锁的解决经历
    获得WCF Client端的本地端口
  • 原文地址:https://www.cnblogs.com/rn-05181226-rw/p/13843496.html
Copyright © 2011-2022 走看看