记录numpy库ndarray数据结构的定义和使用方法,np库常用函数。
a = np.array([[1,2,3],[4,5,6]])
np.ndim(a) => 2 秩:轴的数量
np.shape(a) => (2,3) 2行3列 axis0=2,axis1=3
np.size(a) => 6 元素个数2*3
a.itemsize => 4 元素字节,int类型
数组创建
(1) 从python列表、元组中创建
x = np.array(list/tuple,dtype=数据类型)
a = [1,2,3]
a = (1,2,3)
x = np.array(a)
(2) 通过函数创建
np.arange(n) 从0到n-1的数组
常用 np.arange(k).reshape((m,n))
np.ones((2,3)) 2行3列全1数组
zeros((2,3)) 全0
full((2,3),5) 2行3列,全为5的数组
eye(n) n阶单位矩阵
np.one_like(a) 和a形状一样的全1数组
zeros_like(a) 全0
full_like(a,val) 和a形状一样的全为val的数组
np.linspace(start,stop,steps) 等间距生成
np.linspace(1,4,4) => array([1,2,3])
np.concatenate((a1,a2,a3),axis=0) 数组合并
数组合并时的轴axis必须在a中存在,比如一维只有轴0,就无法使用axis=1 来合并
数组变形
a = np.arange(8)
'''原数组a不变,新生成一个数组返回'''
x = a.reshape((2,4)) (x)=> array([[0, 1, 2, 3],
[4, 5, 6, 7]])
a.resize((2,4)) 原数组变了
'''维度调换,改变原数组
取axis0的第1,2,...,n组的axis1的第一个元素作为axis0新的第一个元素'''
x.swapaxes(1,0) => array([[0, 4],
[1, 5],
[2, 6],
[3, 7]])
b = x.flatten() 降成一维,原数组不变
b = x.astype(float) 改变类型,原数组不变
b = x.tolist() 变成列表,原数组不变
数组索引和切片
a = np.arange(4) => array([0, 1, 2, 3])
a[2] => 2 从0开始索引
a[1:4:2] => array([1, 3]) 从a[1](包括)->a[4](不包括),间隔2
a[:] 该维度所有数据,表示不关心这个维度
a[::2] => array([0, 2]) 从该维度第0个数据开始,步长为2切片
a[-1] => 3 倒数第一个数
a[-2] => 2 倒数第二个数
'''获取下标'''
x = np.arange(6).reshape((2,3))
index = np.array(np.where(x==2)).flatten()
index => array([0, 2], dtype=int64)
各元素的简单运算
x (+ - * / **) y 对应元素进行运算
np.abs(x)/np.fabs(x) 求元素绝对值,fabs是将元素变为float类型,abs不改变类型
np.sqrt(x) 开方
np.square(x) 平方
np.log(x) np.log2(x) np.log10(x)
np.cos(x) np.exp(x) np.sign(x)
np.ceil(x) 上取整
np.floor(x) 下取整
x.clip(0,255) 设置范围
np.rint(x) 四舍五入
a,b = np.modf(x) (小数,整数)独立返回
np.maximun(x,y) np.fmax(x,y) 取x,y同位置最大值生成数组,fmax忽略NAN
np.mininum(x,y) 取小的
np.mod(x,y) 取余
np.copysign(x,y) x的值,y的符号
数学矩阵计算
np.dot(x,y) 矩阵乘法
x.T 求转置
np.linalg.inv(x) 求逆
整个数组的统计运算
np.sum(x,axis=0) 0维求和,不加axis就是整个矩阵求和
np.mean(x,axis=0) 均值
np.average(x,axis=0,weight=np.array(a)) 加权求和,等价于np.sum(x*a)/np.sum(a)
np.std(x,axis=0) 标准差
np.var(x,axis=0) 方差
np.median(x) 中位数
np.max(x) np.min(x)
np.ptp(x) 最大最小值之差
np.argmax(x) np.argmin(x) 得到下标,一维后的位置
np.unravel_index(np.argmax(a),a.shape) 转回高维后的位置
np.gradient(x) 梯度函数
有三个数 a b c: b处梯度(c-a)/2
有两个数 a b : a、b处梯度b-a
多维数组,会返回一个梯度数组
x = np.arange(6).reshape(2,3)
np.gradient(x)
=> [array([[3., 3., 3.],
[3., 3., 3.]]),
array([[1., 1., 1.],
[1., 1., 1.]])]
np.random.rand(2,3) => array([[0.48597334, 0.8402317 , 0.8127727 ],
[0.88309114, 0.7980546 , 0.42271826]]) # 均匀分布
np.random.randn(2,3) 标准正态分布
np.random.randint(low,high,shape) 随机产生low-high的整数数组
np.random.seed(n) 随机数种子
np.random.uniform(low,high,shape) low - high 均匀分布
np.random.normal(mu,sigma,shape) 正态分布
np.random.poisson(lamda,shape) 泊松分布
np.random.shuffle(a) 按第0轴随机排序,打乱,改a
x = np.random.permutation(a) 不改a
np.random.choice(a,shape,replace=Ture,p) 在a中抽元素组成新数组
'''
a:一维
p:对应a,是a中各元素抽到的概率
shape:生成的数组大小
replace=Ture:a中元素可重复使用
'''
一、二维存取
np.savetxt(frame,array,fmt,delimiter=None)
'''
frame:文件名字符串 "mywork.csv"
array:数组
fmt:格式 '%d'(十进制),'%.2f(小数点后两位)','%.18e(科学计数法)'
delimiter:分隔符
'''
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
unpack:读入属性分别写入不同变量