numpy
帮助处理数值型数据,是python科学计算库的基础库 import numpy as np
numpy 创建数组(矩阵)
<class 'numpy.ndarray'>
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array(range(1,6))
arr3 = np.arange(1, 6)
arr4 = np.array(range(1,4), dtype="float")
print(arr4.dtype)
print(arr4.astype("int8").dtype())
print(np.round(random.random(), 2))
数组的形状
t1 = np.arange(12)
print(t1.shape)
t2 = np.array([[1,2,3],[4,5,6]])
print(t2.shape)
print(t2.reshape(t2.shape[0]*t2.shape[1],))
print(t2.flatten())
t3 = np.arange(24).reshape((2,3,4))
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
numpy的一个广播机制: 数组+数字 是 给数组中每个位置都加这个数 0/0=nan 数字/0=inf(无穷 ) 数组相减:按照减数的维度在被减数上减小 广播会在缺失和长度为1的维度上进行
numpy读取本地数据和索引
在numpy中可以理解为方向,使用0,1,2…数字表示,对于三维数组(shape(2,2,3)),有0,1,2轴
计算一个二维数组的平均值,必须指定是哪个方向上的数字平均值
读取数据
- CSV:Comma-Separated Value 逗号分隔值文件
np.loadtxt(frame,dtype="int",delimiter=None,skiprows=0,usecols=None,unpack=False)
- frame:文件、字符串或产生器,可以是.gz或.bz2压缩文件
- dtype:数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认np.float
- delimiter:分割字符串,默认是任何空格,改为逗号
- skiprows:跳过前X行,一般跳过第一行表头
- usecols:读取指定的列,索引,元组类型
- unpack:如果True,转置,如果False,不变,默认False
numpy的四种转置方式
转置是一种变化,为了更方便的处理数据
方法1:读入的时候转置
t1 = np.loadtxt(file_path,delimiter=",",dtype="int",unpack=True)
方法2:
arr1.transpose()
方法3:
arr1.swapaxes(1,0)
方法4:
arr1.T
numpy的索引和切片
a = array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
a[1] = array([4, 5, 6, 7])
a[1:3] = array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
a[:,2] = array([ 2, 6, 10])
a[:,2:4] = array([[ 2, 3],
[ 6, 7],
[10, 11]])
a[[0,2],:] = 取第0和第2行
a[:,[0,3]] = 取第0和第3列
a[2:5,1:4]
a[[0,2],[1,2]]
numpy中数值的修改
a[:,2:4] = 0
a[a<10] = 3
a.where(t<10, 0, 10)
a.clip(10,18)
数组的拼接
temp = np.vstack((t1,t2))
temp = np.hstack((t1,t2))
数组的行列交换
t = array([[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
t[[1,2],:] = t[[2,1],:]
array([[12, 13, 14, 15],
[20, 21, 22, 23],
[16, 17, 18, 19]])
t[:,[0,2]] = t[:,[2,0]]
array([[14, 13, 12, 15],
[22, 21, 20, 23],
[18, 17, 16, 19]])
构造一个全为0的数组,且int类型: np.zeros((t.shape[0],1)).astype(int) 构造一个全为1的数组,且int类型: np.ones((t.shape[0],1)).astype(int) 创建一个对角线为1的正方形数组(方阵)np.eye(3) np.count_nonzero(t2) 返回数组中不为0的个数
获得每行最大值最小值的位置
np.argmax(t,axis=0) np.argmin(t.axis=1)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFSTDODc-1636986201459)(imgs/numpy生成随机数.png)]
- 正态分布:中间高,两头低
- 均匀分布:在相同的大小范围内出现概率是等可能的
numpy的注意点
- a=b 完全不复制,a和b相互影响
- a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,互相影响
- a = b.copy(),复制,互不影响
numpy中的nan和inf
nan(NAN,Nan):not a number表示不是一个数字
什么时候出现nan:
- 当读取文件为float时候,如果有缺失,就会出现nan
- 当做了一个不合适的计算(eg:无穷大(inf)减去无穷大)
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
什么时候出现inf(-inf,+inf):
- 比如一个数字除以0,(python中会直接报错,numpy中是一个inf或-inf)
numpy中nan的注意点
- 两个nan是不相等的
np.nan!=np.nan 为True np.count_nonzero(t) 返回数组中不为0的个数,np.count_nonzero(t!=t) 返回数组中nan的个数。np.isnan(t) 数组的值是不是nan,t[np.isnan(t)] = 0 把nan全部替换0。- nan和任何值计算都为nan
在一组数据中,单纯把nan替换为0,有影响!!! 替换后,会对平均值大小产生影响,所以应该把缺失的数值替换为均值(中值)或者直接删除有缺失的一行
numpy中常用统计函数
求和:t.sum(axis=None) 均值:t.mean(a.axis=None) 受离群点的影响较大 中值:np.median(t,axis=None) 最大值:t.max(axis=None) 最小值:t.min(axis=None) 极值:np.ptp(t,axis=None) 即最大值和最小值只差 标准差:t.std(sxis=None)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYHE7IW7-1636986201461)(imgs/统计函数.png)]
默认返回多维数组的全部的统计结果,如果指定axis,则返回一个当前轴上的结果
|