ndarray多维数组
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或 dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组,表示各维度大小的元组。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
创建数组
- array()函数,括号内可以是列表、元祖、数组、生成器等
ar2 = np.array([1,2,3.1415,4])
ar3 = np.array([[1,2,3],('a','b','c')])
- arange(),类似range(),在给定间隔内返回均匀间隔的值。
print(np.arange(10.0))# 返回0.0-9.0,浮点型
print(np.arange(1,5))# 返回1-4左闭右开
print(np.arange(5.0,12,2)) # 返回5.0-12.0,步长为2
- linspace():返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start:起始值,stop:结束值
num:生成样本数,默认为50
endpoint:如果为真,则停止是最后一个样本。否则,不包括在内。默认值为True。
retstep:如果为真,返回(样本,步骤),其中步长是样本之间的间距 → 输出为一个包含2个元素的元祖,第一个元素为array,第二个为步长实际值
- zeros()/zeros_like()/ones()/ones_like()
numpy.zeros(shape, dtype=float, order='C'):返回给定形状和类型的新数组,用零填充。
shape:数组纬度,二维以上需要用(),且输入参数为整数
dtype:数据类型,默认numpy.float64
order:是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。
zeros()/zeros_like()一样,只是填充为1
- eye()
创建一个正方的N*N的单位矩阵,对角线值为1,其余为0
NumPy 数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。
名称 | 描述 |
---|---|
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通用函数
.T方法:转置,例如原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
numpy.reshape(a, newshape, order='C'):为数组提供新形状,而不更改其数据,所以元素数量需要一致!
numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。
.T/.reshape()/.resize()都是生成新的数组!
.copy():方法生成数组及其数据的完整拷贝
.astype():转换数组类型
np.hstack(tup):水平(按列顺序)堆叠数组
np.vstack(tup):垂直(按列顺序)堆叠数组
np.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!
np.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分
np.vsplit(ary, indices_or_sections):将数组垂直(行方向)拆分为多个子数组 → 按行拆
三角函数:sin()、cos()、tan()。
术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
统计函数:amin() 和 amax()
排序的方法:sort() 函数返回输入数组的排序副本
Numpy随机数
np.random.normal(size=(4,4))#生成一个标准正太分布的4*4样本值
numpy.random.randint(low, high=None, size=None, dtype='l')#生成一个整数或N维整数数组
若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low
dtype参数:只能是int类型
print(np.random.randint(2,size=5))# low=2,size=5 :生成5个[0,2)之间随机整数
print(np.random.randint(2,6,size=5))# low=2,high=6,size=5:生成5个[2,6)之间随机整数
print(np.random.randint(2,size=(2,3)))# low=2,size=(2,3):生成一个2x3整数数组,取数范围:[0,2)随机整数
print(np.random.randint(2,6,(2,3)))# low=2,high=6,size=(2,3):生成一个2*3整数数组,取值范围:[2,6)随机整数
Numpy数据的输入输出
存储/读取数组数据 .npy文件
np.save('array.npy', ar)
np.load('array.npy')存储/读取文本文件
np.savetxt('array.txt',ar, delimiter=',')
np.loadtxt('array.txt', delimiter=',')