python_Numpy_细致与高级使用
内部机制
ndarry主要构成的三要素
dtype:类型
shape:形状
strides:跨度
数据体系
np.issupdtype(arr.dtype,numpy.interger)
:判断数组dtype是否整数类型
高级数组操作
数组重塑造
arr.reshape((4,-1))
:重塑形状,降数据设为4行,自动列
arr.ravel()
:扁平化数据,在源数据上生产并返回一维数组ndarray
arr.flatten()
:扁平化数据,一副本返回一维数组ndarray
C和Fortran顺序
【重塑函数可设参数,表示行列优先的创建顺序】
order:默认是C行优先顺序创建,可设置值为[‘C’,‘F’,‘A’,‘K’]
arr.ravel(order='F')
:扁平化列优先
数组合并与拆分
numpy.concatenate([arr1,arrr2],axis=0)
:以行为对象,链接列表内的数组,返回新ndarray
numpy.vstack((arr1,arr2))
或numpy.row_stack()
:以行为对象链接,链接的快捷方法
numpy.hstack((arr1,arr2))
或numpy.columns_stack()
:以列为对象链接,接链接的快捷方法
numpy.dstack(...)
:以面向‘深度的方式对数组进行堆叠
numpy.split(arr,[1,3],axis=0)
:按轴号拆分数组,轴号分在后面的数组里,链接的反函数,快捷方法有[‘hsplit’,‘vsplit’,‘dsplit’],分别沿轴0,1,2运作
numpy.r_[arr1,arr2]
:以行为对象链接
numpy.c_[1:6,11:16,21:26]
:先把切片解析为数组,再以列为对象链接
元素重复操作
arr.repeat(3,axis=0)
:把数组每行重复3次,返回增大的数组
arr.repeat([2,3,4])
:按索引指定重复次数,0位置重复2次
numpy.tile(arr,2)
:铺瓷砖,水平重复整个arr2次
numpy.tile(arr,(3,2))
:按布局重复铺设arr
花式索引函数
arr.take([3,6,2,1],axis=0)
:按指定索引读取数组
arr.put([]3,,6,2,1)
:修改指定位置的值,暂不支持axis,不建议使用
- ufunc高级应用
- dtype结构化和记录式数组
【一个dtype对应一个元素,一个dtype可以以列表的形式包含多总类型,用元祖声明】
dtype结构和
import numpy as np
dtype=[('x',np.float64),('y',np.int32)]
sarr=np.array([(1.5,6),(np.pi,-2)],dtype=dtype)
sarr
sarr[0]
sarr[0]['x']
sarr['x']
# ---
Out[]:
array([(1.5 , 6), (3.14159265, -2)],dtype=[('x', '<f8'), ('y', '<i4')])
多维
import numpy as np
dtype=[('x',np.int64,3),('y',np.int32)]
sarr=np.zeros(4,dtype=dtype)
sarr
sarr[0]
sarr[0]['x']
sarr['x']
# ---
Out[]:
array([([0, 0, 0], 0), ([0, 0, 0], 0), ([0, 0, 0], 0), ([0, 0, 0], 0)],dtype=[('x', '<i8', (3,)), ('y', '<i4')])
嵌套
import numpy as np
dtype=[('x',[('a','f8'),('b','f4')]),('y',np.int32)]
sarr=np.array([((1,2),5),((3,4),6)],dtype=dtype)
sarr
sarr[0]
sarr[0]['x']
sarr['x']
# ---
Out[]:
array([((1., 2.), 5), ((3., 4.), 6)],dtype=[('x', [('a', '<f8'), ('b', '<f4')]), ('y', '<i4')])
排序
arr[:,0].sort()
:只对第一列进行升序
arr.sort(axis=1)
:以列为对象排序,同
arr[:,::-1]
:返回以列为对象额返序列表
numpy.sort(arr)
:功能相同
numpy.lexsort(arr1,arr2)
:返回arr1索引器
arr.argsort(kind=‘mergesort’)
:返回可以升序排列的索引器,稳定排序
arr.searchsorted(9)
:对有序数组返回适合插入9的索引位置
高级数组输入输出
内存映射文件
- calss numpy.memmap(path,dtype,mode,shape)
mmap.flush()
:将修改数据写出磁盘