numpy
address:https://www.numpy.org.cn/reference/
Ndarray对象
Ndarray
等价于多维数组- 构造方法:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object
:数组或者嵌套的数列dtype
:数组元素的数据类型,可选copy
:数组是否需要复制,如果为false,则是对原数组的引用order
:数组在内存中样式subok
:默认返回一个与基类类型一致的数组ndmin
:数组最小维度数据类型对象dtype
dtype
实例是用来描述与数组对应的内存区域是如何使用的. - 数据类型
- 数据大小
- 数据的字节顺序(大小端,<表示小端,>表示大端)
- 在结构化类型下,字段的名称,每个字段的数据类型和每个字段所取得内存块得部分
- 如果数据类型是子数组,描述其形状和数据类型
构造:numpy.dtype(object, align, copy)
类似于C的struct
,要指明类型索引和类型输于的数据结构,如
d = dtype([('name',`S20`),(('grade','int8'))])
Numpy数组属性
属性 | 说明 |
---|---|
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 | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
Numpy创建数组
numpy.empty创建一个指定形状,指定数据类型的未初始化数组
= np.empty([3,2], dtype = int)
numpy.zero创建一个指定大小,0填充的数组,默认为浮点数
numpy.zeros(shape, dtype = float, order = 'C')
numpy.one创建一个指定形状,1填充的数组,默认为浮点数
x = np.ones([2,2], dtype = int)
numpy.asarray类似array
numpy.asarray(a, dtype = None, order = None)
参数 描述 a 任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组 dtype 数据类型,可选 order 可选,有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 >x = [1,2,3] >a = np.asarray(x)
numpy.frombuffer用于实现动态数组,接受buffer输入参数,以流的形式读入转化成ndarray对象.
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
参数 描述 buffer 可以是任意对象,会以流的形式读入。 dtype 返回数组的数据类型,可选 count 读取的数据数量,默认为-1,读取所有数据。 offset 读取的起始位置,默认为0。 >s = b'Hello World' >a = np.frombuffer(s, dtype = 'S1')
numpy.fromiter 从可迭代对象中建立ndarray对象.
numpy.fromiter(iterable, dtype, count=-1)
参数 描述 iterable 可迭代对象 dtype 返回数组的数据类型 count 读取的数据数量,默认为-1,读取所有数据 numpy.arange创建数值范围并返回ndarray对象
numpy.arange(start, stop, step, dtype)
numpy.linspace创建一个等差数列组成的一维数组
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
numpy.logspace创建一个等比数列
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
Numpy切片
可以通过创建slice类来对数组进行切片
s = slice(0,16,2) print(a[s])
可以通过:和…切片
Numpy索引
整数数组索引
设索引地址为x,y. x = {x1,x2,…xn}, y = {y1,y2,…yn},a[x,y] = [a[x1,y1],…,a[xn,yn]]
>import numpy as np >x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, >11]]) >rows = np.array([[0,0],[3,3]]) >cols = np.array([[0,2],[0,2]]) >y = x[rows,cols] >print (y) ##[y[0,0],y[0,2],y[3,0],y[3,2]]
布尔索引
x = bool运算 , a[x] = {ai | ai 属于 a 且 ai满足x}
花式索引
设索引地址为x, a[x] = {ai | ai的行坐标为xi}
设索引地址为x,y, a[x,y] = {ai | aij的行坐标为xi,aij的列坐标属于y}import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])]) """ [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]] """
Numpy 的广播(broadcase)
如果数组运算,这俩矩阵的shape不同,则触发broadcase.
broadcase规则
- 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
- 输出数组的形状是输入数组形状的各个维度上的最大值。
- 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
- 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
Numpy的迭代
numpy.nditer可以将数组转化为迭代,默认是根据数组内存布局.
其中flags可以取:nditer(array,order = "C",op_flags = ['read_only'],flags)
参数 描述 c_index 可以跟踪 C 顺序的索引 f_index 可以跟踪 Fortran 顺序的索引 multi_index 每次迭代可以跟踪一种索引类型 external_loop 给出的值是具有多个值的一维数组,而不是零维数组
如果迭代一个可广播的数组,则迭代放回的是两个值,这两个值是广播之后两个数组的值
Numpy数组操作
函数 | 描述 |
---|---|
reshape | 不改变数据的条件下修改形状 |
flat | 数组元素迭代器 |
flatten | 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 |
ravel | 返回展开数组 |
transpose | 对换数组的维度,转置 |
broadcase | 返回一个数组对另一个数组广播的结果 |
split | 分割数组 |
Numpy位运算
函数 | 描述 |
---|---|
bitwise_and | 对数组元素执行位与操作 |
bitwise_or | 对数组元素执行位或操作 |
invert | 按位取反 |
left_shift | 向左移动二进制表示的位 |
right_shift | 向右移动二进制表示的位 |
Numpy数学函数
numpy内置了pi,numpy.pi就是pi
- 三角函数
sin,cos,tan只支持弧度制
arcsin,arccos,arctan返回弧度制,可通过degrees转化为角度值Numpy算术函数
add,subtract,multiply,divide,对数组相应数据进行计算Numpy统计函数
- amin函数
amin(array,axis)
没有设置axis,默认当成一维数组 - amax函数
amax(array,axis)
没有设置axis,默认是一维数组 - ptp函数
ptp(array,axis)
没有设置axis,默认为一维数组 - percentile函数
percentile(array, q, axis)
,p是有p%
的数据项小于或等于这个值 - media函数
media(array,axis)
计算中位数 - mean函数
mean(array,axis)
计算算数平均数 - average函数
mean(array,weights,returened,axis)
weights需要一个权重数组,returened是返回权重和 - std标准差函数,var方差函数
Numpy 排序条件筛选函数
- sort
sort(a, axis, kind, order)
kind为排序算法种,order就是排序字段 - agsort返回数组从小到大的索引值
- lexsort 对多个序列进行排序,排序时优先照顾靠后的序列
- msort(a) 数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。
- sort_complex(a) 对复数按照先实部后虚部的顺序进行排序。
- partition(a, kth[, axis, kind, order]) 指定一个数,对数组进行分区
- argpartition(a, kth[, axis, kind, order]) 可以通过关键字 kind 指定算法沿着指定轴对数组进行分区
- numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。
- numpy.nonzero() 函数返回输入数组中非零元素的索引。
- numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
- numpy.extract() 函数根据某个条件从数组中抽取元素,返回满足条件的元素。
Numpy的副本和视图
简单来说,副本和原来的数组面对的内存不一样,视图时对原来数组的引用.
视图:
- 切片
- view方法
副本:
- deepCopy
- ndarray的copy方法
Numpy矩阵库
- matlib.empty
numpy.matlib.empty(shape, dtype, order)
创建一个随机填充的矩阵 - matlib.zeros创建一个以 0 填充的矩阵。
- matlib.ones 创建一个以1填充的矩阵
- matlib.eye 创建一个对角元素为1的矩阵
numpy.matlib.eye(n, M,k, dtype)
其中n为行数,M为列数,K为对角线的索引 - numpy.matlib.identity() 函数返回给定大小的单位矩阵
- numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。
Numpy线性代数
函数 描述 dot 一维就是数组对应相乘,高维数组就是两个矩阵相乘。 vdot 两个向量的点积 inner 两个数组的内积 matmul 两个数组的矩阵积 determinant 数组的行列式 solve 求解线性矩阵方程 inv 计算矩阵的乘法逆矩阵 Numpy I/O
- numpy.save 把一个数组存成npy形式 load取出
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
- numpy.savez 把多个数组存成npy形式 load取出
numpy.savez(file, *args, **kwds)
- numpy.savetxt 把数组存储txt形式 loadtxt取出
savetxt(FILENAME, a, fmt="%d", delimiter=",")