numpy函数库基础笔记

整理者:孙双龙(孙小五、五癫)
时间:2018/7/21
地点:合肥泊寓
描述:numpy资料整理,准备学习下python和tensorflow、深度学习相关知识

1.python中numpy函数库是干什么的?

(1)NumPy是一个开源的Python科学计算库,NumericalPython的简写。
(2)常用的:提供了python玩转数组和矩阵的各种操作,支持高维度数组与矩阵的运算,针对运算提供大量的数学函数库,是机器学习框架的基础库。
(3)Ps:计算机的学生学习线性代数和矩阵论等课程时,若想写代码来计算其中题目,这个numpy模块就是个不错的选择;c系同学也可以使用opencv提供的Mat做矩阵运算,不过若以简易程度出发,numpy比较方便。

2.为什么要使用numpy?

(1)自诞生到现在超过10年历史,算法经实践检验,稳定性强
(2)核心算法由c编写,效率高
(3)扩展性好,容易集成到其他语言
(4)开源免费
(5)提供了很多高度封装的函数,简单调用就可对数组和矩阵进行复杂计算,比直接python手写高效。

3.安装

(1)推荐Anaconda发行本,是真好用~~(由于笔者自己电脑已安装,就不重新开始了)
(2)或者直接pip也行,随意~~
成功安装,显示如下:

4.操作解析

在学习任何东西之前,你最先要知道的是这些东西是干嘛的,能解决哪些问题。Numpy包含接口很多,笔者自身挑选几个觉得常用的随手记录一下。
(1)通过array方法创建数组
一维的:
lst = [1,1,1] a = np.array(lst)
b = np.array([1,1,1])
二维的:
c = np.array([[1,2,3],[4,5,6]])
三维的:
E= np.arra([[[1,2,3],[4,5,6],[7,8,9]]])
ndim属性:维度
shape属性:返回一个元组(tuple),元组中的元素即为numpy数组每一个维度上的大小
dtype属性:数组数据类型的对象
举个栗子吧:

创建这个多维数组:
import numpy as np
test = np.array([[[0.1,0.1],[0.1,0.2],[0.1,0.3],[0.1,0.4]],
[[0.2,0.1],[0.2,0.2],[0.2,0.3],[0.2,0.4]],
[[0.3,0.1],[0.3,0.2],[0.3,0.3],[0.3,0.4]]])
print (test.ndim)
print (test.shape)
运行后结果为:

ok
(2)数组的索引和切片
数组的索引:
采用[]形式索引,指定各维度,中间用逗号隔开。比如我要找test中的(0.3,0.3)坐标,则写法为test[2,2],若要指定test[2,2]中的后一个0.3,则写法为test[2,2,1] 数组的切片:
采用[]形式,指定各切片维度,中间用冒号隔开。比如我要找test中的
0.1, 0.3 0.1, 0.4
0.2, 0.3 0.2, 0.4
则指定test[0:2,2:4],注意返回结果的类型。
(3)数组运算
ar1=np.array([[2,1],[1,2]])
ar2=np.array([[1,2],[3,4]])
print ar1-ar2 #减法
print ar1**2 #次方
print ar2*3 #数乘
print ar1*ar2 #普通乘法
print np.dot(ar1,ar2) #矩阵乘法
print ar2.T #转置
print np.linalg.inv(ar2) #矩阵的逆
print ar2.sum() #矩阵元素求和
print ar2.max() #矩阵最大的元素

(4)读写文件
存储
import numpy as np
print (“sunxiaowu”)
data = np.eye(10)
print (data)
np.savetxt(“eye.txt”,data) #存储txt文件
读取
numpy中的loadtxt函数可以读取CSV文件自动切分字段,并在于numpy数组。举例
CSV中一行数据如下:
下面为一行数据:
AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
c,v=np.loadtxt(‘data.csv’, delimiter=’,’, usecols=(6,7), unpack=True)
用delimiter参数指定了文件中的分隔符为英文逗号,用usecols中的参数指定了我
们感兴趣的数据列,并将unpack参数设置为True使得不同列的数据分开存储,以便随后使用。
其中关于c的信息打印如下:
print (type(c))
print (c)
print (c.ndim)
print (c.shape)
/************************************************************************/
<class ‘numpy.ndarray’>
[ 336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16
354.54 356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62
342.88 348.16 353.21 349.31 352.12 359.56 360. 355.36 355.76
352.47 346.67 351.99] 1
(30,)

(5)numpy提供的各种好玩的计算函数(对比c系确实简化了很多)
np.mean(数组形参(不论维度))-计算数组元素的算术平均数:
np.average(数组形参,weights = 权重数组形参)-加权平均值
np.max() np.min() 顾名思义,不解释(有一种python解放了编程生产力的感觉
np.msort() 排序
numpy提供的统计分析类函数:
np.median() 中位数
np.var() 方差:衡量随机变量或者一组数据的离散程度
….还有很多接口供我们选择,自行阅览一遍有影响即可,待用时再查。

(6)讲解下numpy怎么玩起矩阵就收工
numpy存在两种不同的数据类型(matrix和array)
我们调用np.mat()可以将数组转化为矩阵
import numpy as np
a = np.eye(10) #2维数组,10行10列
print (type(a))
print (a.shape)
b = np.mat(a)
print (type(b))
print (b.shape)
结果:

Matrix类型中有多操作矩阵的接口可以直接调用
b.I //矩阵求逆 —–不能更好用
matrix型矩阵相乘a*b,加减乘除类似

关于本部分知识的详细pdf书籍推荐-Python数据分析基础教程:NumPy学习指南(第2版)

“numpy函数库基础笔记”的646个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注