Numpy笔记
Numpy
ndarray
对象是一种由同质元素组成的多维数组。它的特点是:
- 元素数量预先指定好
- 同质:几乎所有元素的类型和大小都相同
元素的类型通过ndarray.dtype
获取
ndarray.ndim描述轴的数量,即秩的大小
ndarray.size描述数组长度
ndarray.shape描述数组的型,轴的数量和数组长度,它的返回值是一个元组类型,有两种形式:
-
(size,)
元组只有一个元素,表示数组轴数是1,数组长度是\(size\)
-
(n,size)
当\(n<=2\),表示数组的轴数是2;当\(n > 2\),表示数组的轴数是\(n\).数组长度是\(size\)
创建ndarray对象
numpy.array()
numpy.arange(start,end,step=1)
numpy.random.random(number)
ornumpy.random.random((row,col))
numpy.zeros((row,col))
numpy.ones((row,col))
numpy.linspace(start,end,分隔区间的数量)
基本操作
-
算数运算符
当矩阵和一个标量进行四则运算,会通过广播机制对每个元素进行算术运算
-
矩阵乘法
numpy.dot(A,B)
索引
索引操作获取的是数组的视图,对索引结果的修改,会影响原数组。
-
一维数组
ndarray[index]
或ndarray[[index_x,index_y,index_z,...]]
可以索引一个元素或多个元素
-
多维数组
ndarray[row,col]
索引时指定元素的行和列
切片
切片操作获取的是数组的视图,对索引结果的修改,会影响原数组。
-
一维数组
ndarray[start:end:step]
start
缺省值为0,end
缺省值为数组的长度,step
是可选的步长 -
多维数组
多维数组切片,要指明切片的范围和切片操作
-
单行
ndarray[row,start:end:step]
-
连续行
ndarray[row_start:row_end,start:end:step]
-
不连续行
ndarray[[row_x,row_y,...],start:end:step]
-
数组拼接
-
横向拼接
numpy.hstack((A,B))
-
纵向拼接
numpy.vstack((A,B))
-
numpy.column_stack
ornumpy.row_stack()
可以用来处理一维数组的拼接
数组迭代
-
推荐方法:
numpy.apply_along_axis(聚合函数,*,axis,ndarray)
axis
是一个boolean值,0表示按列迭代,1表示按行迭代。ndarray
表示要处理的数组 -
for ... in ...
结构化数组
结构体元素类型:
bytes | b1 |
---|---|
int | i1,i2,i4,i8 |
unsigned ints | u1,u2,u4,u8 |
floats | f2,f4,f8 |
complex | c8,c16 |
fixed length string | a |
numpy.array([...],...,dtype=('type,type1,...'))
或者
numpy.array([...],...,dtype=[('field',type),('field',type),...])
如果不指定字段标题,默认字段名为f<n>
,利用字段名可以轻松的引用矩阵的某列
数据文件读取
numpy.save(filename,dataArray)
会将数组序列化为.npy
二进制文件,反序列化可以通过numpy.load(filename)
读取文本文件
numpy.genfromtxt(filename,delimiter=None,names=None)
它接受三个参数:
- 存放数据的文件名
- 分隔符
- 是否含有标题
该函数包含两层隐式循环:
- 第一层循环每次读取文件的一行
- 将每行的多个值分开,再对这些值进行转化,依次插入所建数组的相应位置。
- 对于缺失数据,返回
nan