NumpyTutorial
1、Ndarray 对象
ndarray(N 维数组)对象是 Numpy 最重要的一个特点,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成
- 一个指向数据(内存或内存映射文件中的一块数据)的指针。
- 数据类型或 dtype,描述在数组中的固定大小值的格子。
- 一个表示数组形状(shape)的元组,表示各维度大小的元组。
- 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
创建 ndarray:
- 通过 array() 函数
numpy.array
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
object:array_like。数组对象;公放的数组接口对象;对象的__array__方法返回的一个数组;或任何(嵌套的)序列。
dtype:data-type, optional。数组所需的数据类型。如果没有给出,那么类型将被确定为在序列中保存对象所需的最小类型。此参数只能用于“向上转换”数组。对于向下类型转换,使用 .astype(t) 方法。
copy:bool, optional。如果为 true (默认),则复制该对象。否则,只有在 array 返回一个副本、obj 是嵌套序列或者需要一个副本来满足任何其他需求 (dtype、order等) 时,才会进行复制。
order:{‘K’, ‘A’, ‘C’, ‘F’}, optional。指定数组的内存布局。如果对象不是数组,则新创建的数组将以C顺序(row major)出现,除非指定了“F”,在这种情况下,它将以Fortran顺序(column major)出现。如果对象是一个数组,则如下所示:
order no copy copy=True K unchanged F & C order preserved, otherwise most similar order A unchanged F order if input is F and not C, otherwise C order C C order C order F F order F order subok : bool, optional。如果为 True,那么子类将被传递,否则返回的数组将被强制为基类数组(默认)。
ndmin : int, optional。指定结果数组应该具有的最小维数。一个将预先垂到形状需要满足这一要求。
import numpy as np
np.array([1,2,3])
结果:array([1, 2, 3])
np.array([[1,2], [3,4]])
结果:array([[1, 2],
[3, 4]])
np.array([1,2,3], dtype = complex)
结果:array([1.+0.j, 2.+0.j, 3.+0.j])
- 通过 ndarray() 函数
numpy.ndarray
numpy.ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None)
创建一个固定大小的同构数据多维数组。
shape:tuple of ints。数组形状。
dtype:data-type, optional。任何可以解释为 numpy 数据类型的对象。
buffer:object exposing buffer interface, optional。填充数组的数据。
offset:int, optional。缓冲区中数组数据的偏移量。。
strides:tuple of ints, optional。内存中数据的跨步。
order:{‘C’, ‘F’}, optional。Row-major (C-style) or column-major (Fortran-style) order。
- 通过其他函数
2、Numpy 数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。
https://docs.scipy.org/doc/numpy/user/basics.types.html
2.1 基本类型
下表列举了常用 NumPy 基本类型。
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
Numpy 有 5 种基本的数字类型:布尔值(bool)、整数(int)、无符号整数(uint)、浮点数(float)、复数(complex)。名称中带有数字的部分表示类型的位大小(即在内存中表示一个值需要多少位)。如 int32、int64。
2.2 数据类型对象 (dtype)
数据类型对象:描述数组中元素类型的对象。是用来描述与数组对应的内存区域如何使用,这包括如下几个方面:
- 数据的类型(整数,浮点数或者 Python 对象 name)
- 数据的大小(例如, 整数使用多少个字节存储 itemsize)
- 数据的字节顺序(小端法或大端法 byteorder)
说明:int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,‘i4’,‘i8’ 代替
In :np.dtype('i4')
Out:dtype('int32')
In :np.dtype('int32')
Out:dtype('int32')
In :np.dtype([('username',np.int16)])
Out:dtype([('username', '<i2')])
注意:与数组属性区分开 ndarray.dtype。
3、Numpy 数组(ndarray)属性
属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
AA | BB |
AA | BB |
AA | BB |
AA | BB |
AA | BB |
AA | BB |
AA | BB |
AA | BB |
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。