Ndarray对象
2021-8-1
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 
NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
ndarray对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。
ndarray内部由以下内容组成:
notion image
  • 一个指向数据(内存或内存映射文件中的一块数据)的指针
  • 数据类型或dtype,描述在数组中的固定大小值的格子
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中obj[::-1]obj[:,::-1]就是如此
 
 

创建ndarray对象

创建一个ndarray只需调用 NumPy array函数即可:
参数说明:
名称
描述
object
数组或嵌套的数列
dtype
数组元素的数据类型,可选
copy
对象是否需要复制,可选
order
创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok
默认返回一个与基类类型一致的数组
ndmin
指定生成数组的最小维度
数组和列表
Numpy中的数组的使用跟Python中的列表非常类似,区别如下:
  1. 一个列表中可以存储多种数据类型,比如a = [1,'a']是允许的,而数组只能存储同种数据类型
    1. 数组可以是多维的,当多维数组中所有的数据都是数值类型的时候,相当于线性代数中的矩阵,是可以进行相互间的运算的。

    创建数组的几种方式

    notion image
     
     

    numpy.asarray

    numpy.asarray类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个
    参数说明:
    参数
    描述
    a
    任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
    dtype
    数据类型,可选
    order
    可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序
     

    numpy.frombuffer

    numpy.frombuffer用于实现动态数组,接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象
    注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b
     
    参数说明:
    参数
    描述
    buffer
    可以是任意对象,会以流的形式读入。
    dtype
    返回数组的数据类型,可选
    count
    读取的数据数量,默认为-1,读取所有数据。
    offset
    读取的起始位置,默认为0。
     

    numpy.fromiter

    numpy.fromiter方法从可迭代对象中建立 ndarray 对象,返回一维数组
    参数
    描述
    iterable
    可迭代对象
    dtype
    返回数组的数据类型
    count
    读取的数据数量,默认为-1,读取所有数据
     

    numpy.linspace

    函数用于创建一个一维数组,数组是一个等差数列构成的:
    参数说明:
    参数
    描述
    start
    序列的起始值
    stop
    序列的终止值,如果endpoint为true,该值包含于数列中
    num
    要生成的等步长的样本数量,默认为50
    endpoint
    该值为 true 时,数列中包含stop值,反之不包含,默认是True。
    retstep
    如果为 True 时,生成的数组中会显示间距,反之不显示。
    dtype
    ndarray 的数据类型
     

    numpy.logspace

    numpy.logspace函数用于创建一个于等比数列:
    base 参数意思是取对数的时候 log 的下标
    参数
    描述
    start
    序列的起始值为:base ** start
    stop
    序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中
    num
    要生成的等步长的样本数量,默认为50
    endpoint
    该值为 true 时,数列中中包含stop值,反之不包含,默认是True。
    base
    对数 log 的底数。
    dtype
    ndarray 的数据类型
     
     

    数据类型dtype

    可以通过dtype获取数组中的元素的数据类型,以下是ndarray.dtype的常用的数据类型:
    数据类型
    描述
    唯一标识符
    bool
    用一个字节存储的布尔类型(True或False)
    'b'
    int8
    一个字节大小,-128 至 127
    'i1'
    int16
    整数,16 位整数(-32768 ~ 32767)
    'i2'
    int32
    整数,32 位整数( ~ )
    'i4'
    int64
    整数,64 位整数( ~ )
    'i8'
    uint8
    无符号整数,0 至 255
    'u1'
    uint16
    无符号整数,0 至 65535
    'u2'
    uint32
    无符号整数,0 至
    'u4'
    uint64
    无符号整数,0 至
    'u8'
    float16
    半精度浮点数:16位,正负号1位,指数5位,精度10位
    'f2'
    float32
    单精度浮点数:32位,正负号1位,指数8位,精度23位
    'f4'
    float64
    双精度浮点数:64位,正负号1位,指数11位,精度52位
    'f8'
    float128
    拓展精度浮点型
    'f8'或'g'
    complex64
    复数,分别用两个32位浮点数表示实部和虚部
    'c8'
    complex128
    复数,分别用两个64位浮点数表示实部和虚部
    'c16'
    complex256
    复数
    'c32'
    object
    python对象
    'O'
    string_
    字符串
    'S'
    unicode_
    unicode类型
    'U'
    Numpy中关于数值的类型比Python内置的多得多,这是为了能高效处理处理海量数据而设计的。比如想要存储上百亿的数字,并且这些数字都不超过254(一个字节内),就可以将dtype设置为int8,这样就比默认使用int64更能节省内存空间了。
     

    默认的数据类型

    如果是windows系统,默认是int32;如果是mac或者linux系统,则根据系统来:
     

    指定dtype

     

    修改dtype

     
    dtype对象是使用以下语法构造的:
     
     
     

    数组属性

    NumPy数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组秩为 1,二维数组秩为 2。
    NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如二维数组相当于是两个一维数组,第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
    可以声明axis
    • axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作
    • axis=1,表示沿着第1轴进行操作,即对每一行进行操作
     
    NumPy 的数组中比较重要 ndarray 对象属性有:
    notion image

    ndarray.ndim

     

    ndarray.shape

    ndarray.reshape

    通过ndarray.reshape可以修改数组的形状,条件只有一个:修改后的形状的元素个数必须和原来的个数一致。比如原来是(2,6),那么修改完成后可以变成(3,4),但是不能变成(1,4)。
    reshape不会修改原来数组的形状,他只会将修改后的结果返回。
    注意:reshape并不会修改原来数组本身,而是会将修改后的结果返回。如果想要直接修改数组本身,那么可以使用resize来替代reshape
    ndarray.flatten转换成一维数组
     

    ndarray.size

    通过ndarray.size可以看到数组总共有多少个元素
     

    ndarray.itemsize

    通过ndarray.itemsize可以看到数组中每个元素所占内存的大小,单位是字节(1个字节=8位)
     

    ndarray.flags

    ndarray.flags返回 ndarray 对象的内存信息,包含以下属性:
    notion image
     
  2. Numpy
  3. Numpy数组索引和切片
    目录