Numpy基础笔记
Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
④线性代数、随机数生成以及傅里叶变换功能。
⑤用于集成由C、C++、Fortran等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
- data1=[6,7.5,8,0,1] #创建列表
- arr1=np.array(data1) #转换为数组
- arr1.dtype #数据类型保存在dtype对象中
- data2=[[1,2,3,4],[5,6,7,8]] #创建嵌套序列(由等长列表组成的列表)
- arr2=np.array(data2) #转换为多维数组
- np.zeros(10) #创建指定长度(10)的全0数组
- np.ones((3,6)) #创建指定长度的(3行6列二维)的全1数组
- range(10) #创建指定数量的顺序列表(内置函数,默认0开始)
- arange(10) #创建指定数量的顺序数组
- eye(10) #创建一个正方的N×N单位矩阵
- arr1=np.array([1,2,3],dtype=np.float64) #解释为特定数据类型
数组和标量之间的运算
- arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #创建二维数组
- arr*arr #行列号相同的数组元素间运算
- arr-arr
- 1/arr
- arr*0.5
基本的索引与切片
- arr=np.arange(10)
- arr[5] #索引第6个元素
- arr[5:8] #索引第6到第9个元素作为数组
- arr[5:8]=12 #令第6到第9个元素等于12
- arr_slice=arr[5:8] #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
- arr_slice[:]=64 #将数组切片的全部元素改为64
- arr[5:8].copy() #得到数组切片的一份副本
- arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
- arr2d[2] #索引二维数组第3行
- arr2d[0][2] arr2d[0,2] #等价索引1行3列元素
- arr2d[:2] #索引第1行和第2行(不含第3行)
- arr2d[:,:1] #索引第1列
- arr2d[:-2] #使用负数索引将从尾部开始选取行
数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。
- arr=np.arange(15).reshape((3,5)) #生成顺序数组,后整形为3行5列
- arr.T #转置
- arr=np.random.randn(6,3) #randn函数生成一些正态分布的随机数组(6行3列)
- np.dot(arr.T,arr) #利用np.dot计算矩阵内积XTX
通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
- arr=np.arange(10)
- np.sqrt(arr) #计算各元素的平方根(arr**0.5)
- exp #计算各元素指数ex; abs #绝对值;
- np.add(x,y) #x、y数组中对应元素相加; subtract #相减; multiply #相乘; divide #相除;
利用数组进行数据处理
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where函数是三元表达式x if condition else y的矢量化版本
- xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #两个数值数组
- yarr=np.array([2.1,2.2,2.3,2.4,2.5])
- cond=np.array([True,False,True,True,False]) #一个布尔数组
- result=np.where(cond,xarr,yarr) #三元表达式
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:
- arr=np.random.randn(5,4)
- arr.mean(); np.mean(arr); arr.sum();
- arr.mean(axis=1) #计算该轴上的统计值(0为列,1为行)
用于布尔型数组的方法
布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
- arr=randn(100)
- (arr>0).sum() #正值的数量
- bools.any() #用于测试数组中是否存在一个或多个True
- bools.all() #用于测试数组中所有值是否都是True
排序
跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。
- arr=randn(8)
- arr.sort()
- arr=randn(5,3)
- arr.sort(0) #二维数组按列排序; arr.sort(1) #二维数组按行排序;
唯一化
- ints=np.array([3,3,3,2,2,1,1,4,4])
- np.unique(names) #找出数组中的唯一值并返回已排序的结果
用于数组的文件输入输出
Numpy能够读写磁盘上的文本数据或二进制数据。
- arr=np.arange(10)
- np.save(‘some_array’,arr) #数组以未压缩的原始二进制格式保存在.npy文件中
- np.load(‘some_array’) #通过np.load读取磁盘上的数组
- np.savez(‘array_archive.npz’,a=arr,b=arr) #将多个数组以保存在一个压缩文件中
- a=np.arange(0,12,0.5).reshape(4,-1)
- np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存数据,以空格分隔
- np.loadtxt(‘E:\\kankan\\a.txt’)
- np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改为保存为整数,以逗号分隔
- np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #读入时也需指定逗号分隔
线性代数
- x=np.array([[1.,2.,3.],[4.,5.,6.]])
- y=np.array([[6.,23.],[-1,7],[8,9]])
- x.dot(y) #矩阵乘法,相当于np.dot(x,y)
【参考文献】
[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社
Numpy基础笔记的更多相关文章
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- python学习笔记(三):numpy基础
Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...
- 【学习笔记】 第04章 NumPy基础:数组和矢量计算
前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
随机推荐
- springmvc报错 org.springframework.web.servlet.DispatcherServlet
在写springMVC时,导入所有需要的包后,运行程序,控制台报以下错误: 严重: Servlet [springDispatcherServlet] in web application [/Spr ...
- opencv学习笔记-图像叠加、混合
在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect, ...
- c#基础语言编程-正则表达式应用
引言 在不同语言中虽正则表达式一样,但应用函数还是有所区别,在c#语言中使用Regex. 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法. 方法参数包含输入字符串和正 ...
- TortoiseSVN搭建本地版本库及简单操作使用
TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...
- C#截取指定字符串函数
本文转载:http://www.cnblogs.com/liufei88866/archive/2012/05/12/2497395.html 一.通过函数方式进行获取. public string ...
- 谈一下怎样设计Oracle 分区表
在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...
- 动态添加子视图 UIView 的正确方法
很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...
- HTTP协议 状态码详解
http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
- GET和POST本质上有什么区别
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...
- 在treeview外加一个滚动条的实现
前台代码: <div style="overflow:auto;width:190px;height:280px;border:1px solid #336699;padding-le ...