Numpy详解
1.什么是numpy
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算
==为什么学习numpy?==
1.快速
2.方便
3.科学计算的基础库
2.numpy基础
2.1numpy创建数组(矩阵)
2.2numpy中常见的更多数据类型
2.3数据类型的操作
==代码示例==
1 | # coding=utf-8 |
2.4数组的形状
2.5数组和数的计算
2.7广播原则
怎么理解呢?
可以把维度指的是shape所对应的数字个数
那么问题来了:
shape为(3,3,3)的数组能够和(3,2)的数组进行计算么? ==不能==
shape为(3,3,2)的数组能够和(3,2)的数组进行计算么? ==能==
有什么好处呢?
举个例子:每列的数据减去列的平均值的结果
2.8轴(axis)
在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2, 3)),有0,1,2轴
有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值
那么问题来了:
在前面的知识,轴在哪里?
回顾np.arange(0,10).reshape((2,5)),reshpe中2表示0轴长度(包含数据的条数)为2,1轴长度为5,2X5一共10个数据
==二维数组的轴==
==三维数组的轴==
2.9numpy读取数据
CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
2.10numpy中的转置
转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据
以上的三种方法都可以实现二维数组的转置的效果,大家能够看出来,转置和交换轴的效果一样
==示例==
现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量([“views”,”likes”,”dislikes”,”comment_total”])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作,那么,结合之前的所学的matplotlib把英国和美国的数据呈现出来?
看到这个问题,我们应该考虑什么?
1.我们想要反映出什么样的结果,解决什么问题?
2.选择什么样的呈现方式?
3.数据还需要做什么样的处理?
4.写代码
2.11numpy索引和切片
对于刚刚加载出来的数据,我如果只想选择其中的某一列(行)我们应该怎么做呢?
其实操作很简单,和python中列表的操作一样
==代码示例==
1 | # coding=utf-8 |
2.12numpy中数值的修改
2.13numpy中布尔索引
2.14numpy中三元运算符
2.15numpy中的clip(裁剪)
观察上方的操作:
小于10的替换为10,大于18的替换为了18,nan不会被替换
2.16numpy中的nan和inf
nan(NAN,Nan):not a number表示不是一个数字
什么时候numpy中会出现nan:
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
什么时候回出现inf包括(-inf,+inf)
比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)
==numpy中的nan的注意点==
那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
2.17numpy中常用统计函数
求和: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(axis=None)
默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果
2.18 一个小案例
t中存在nan值,如何操作把其中的nan填充为每一列的均值
t = array([[ 0., 1., 2., 3., 4., 5.],
[ 6., 7., nan, 9., 10., 11.],
[ 12., 13., 14., nan, 16., 17.],
[ 18., 19., 20., 21., 22., 23.]])
1 | import numpy as np |
2.19数组的拼接及行列交换
==数组的行列交换==
==numpy更多好用的方法==
1.获取最大值最小值的位置
np.argmax(t,axis=0)
np.argmin(t,axis=1)
2.创建一个全0的数组: np.zeros((3,4))
3.创建一个全1的数组:np.ones((3,4))
4.创建一个对角线为1的正方形数组(方阵):np.eye(3)
2.20numpy生成随机数
==分布的补充==
2.21numpy的注意点copy和view
1.a=b 完全不复制,a和b相互影响
2.a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
3.a = b.copy(),复制,a和b互不影响