type
status
date
slug
summary
tags
category
icon
password
Property
NumPy
最重要的一个特点是其N维数组对象ndarray
,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray
对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。ndarray
内部由以下内容组成:- 一个指向数据(内存或内存映射文件中的一块数据)的指针
- 数据类型或
dtype
,描述在数组中的固定大小值的格子
- 一个表示数组形状(
shape
)的元组,表示各维度大小的元组
- 一个跨度元组(
stride
),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中obj[::-1]
或obj[:,::-1]
就是如此
创建ndarray对象
创建一个
ndarray
只需调用 NumPy
的array
函数即可:参数说明:
名称 | 描述 |
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
数组和列表
Numpy
中的数组的使用跟Python
中的列表非常类似,区别如下:- 一个列表中可以存储多种数据类型,比如
a = [1,'a']
是允许的,而数组只能存储同种数据类型
- 数组可以是多维的,当多维数组中所有的数据都是数值类型的时候,相当于线性代数中的矩阵,是可以进行相互间的运算的。
创建数组的几种方式
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 对象属性有:
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 对象的内存信息,包含以下属性: