Numpy学习笔记
Numpy是Python的一个数值计算库
Numpy使用ndarray对象来处理多维数据
np.array创建darray
Numpy的优势
ndarray的元素是连续存储的,因此随机读写性能会好
ndarray的属性
关键且常用的属性就是shape和dtype
常见的类型:
在创建ndarray时,我们可以指定类型:
如果不指定,整数默认是int64,小数默认是float64
数组修改类型:
生成数组的方式
linspace第三个参数表示生成的数组中元素的个数
np.arange的用法和python的range比较像,但是它是可以生成小数,而range只能是整数
我们可以使用np.round来确定小数的保留位数
均匀分布和正态分布
均匀分布:np.random.uniform(low,high,size)
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k
个样本,缺省时输出1个值。
正态分布:np.random.normal(loc,scale,size)
loc:float
概率分布的均值,对应着整个分布的中心center
scale:float
概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高
size:int or tuple of ints
输出的shape,默认为None,只输出一个值
数组变形
数组序列化
输出为:
数组去重
其实python也有一个内置的去重函数叫set(),但是其传入的只能是一维数组,我们也可以将ndarray通过 数组名.flatten()压缩为一维再使用
逻辑运算
-
直接对数组中元素值进行布尔运算,返回布尔数组:
-
对于上面返回的布尔数组,可以再次传入原始数组中从而获取值为True的元素组成的数组
-
还可以对上面的数组直接赋值
也就是对满足表达式的元素直接赋值。省去了for循环
-
注意上面逻辑与和逻辑或的用法
统计运算
可以选择按行统计还是按列统计
可以用ndarray.方法名,也可以用np.函数名
argmin返回的是最小值的位置而不是最小值
数组间运算
数组与数的运算实质是数和数组中所有元素的运算
数组之间也可以运算:
可以看到,宽度一致时,是一层一层相减的。但是这样要求t7的长必须为1,t7要是两层的话就不行了。同样地,t7如果是一列也可以算
矩阵运算
numpy中数组和矩阵不是一种类型,矩阵的存储使用的是matrix数据类型,当然用ndarray也没什么问题
使用np.mat来创建matrix
矩阵乘法:
对于ndarray类型的话:
对于matrix类型,直接使用*
即可
数组的合并与分割
hstack是对数组进行水平拼接,而vstack是进行垂直拼接
np.concatenate可以进行水平和垂直拼接,但是需要传入参数来确定是怎么拼接
np.split可以传入要分割的个数(此时默认每个里的元素数量是相同的),也可以按下标分割,例如上图中第二个例子将前3个、4-5个等等分成不同组
文件的读取和数据处理
读取csv
但是这样的读取是存在问题的:
原csv是这样:
读出来是这样:
(nan:not a number)
对于字符串会自动读成nan,因为ndarray中元素的类型需要是一样的,所以不能第一行是字符串而剩下的是数。这个nan的类型和其他元素的类型保持一致
我们可以看到原本的数据中其实就是有两个缺失值的,这个一般怎么处理呢?一种方法是,如果我们的数据够多,就可以直接删除这个缺失值所在的样本;另外一个思路是求缺失值所在的那一列的平均值填入,具体函数如下:
所以我们一般不用numpy来读文件,而只用它来处理文件
而对于数据处理,pandas更为方便