numpy快速入门
numpy快速入门
numpy是python的科学计算的核心库,很多更高层次的库都基于numpy。博主不太喜欢重量级的MATLAB,于是用numpy进行科学计算成为了不二选择。
本文主要参考Scipy关于numpy的quickstart。
基础篇
numpy的主要研究对象是同质多维数组,同质表示数据类型一致,多维表示有多个维度。举个例子就是以下形式:
#生成范围为1~100,大小为3x4的随机矩阵
In [25]: x = np.random.randint(1,100,size=(3,4))
In [26]: x
Out[26]:
array([[28, 23, 32, 5],
[32, 44, 85, 84],
[21, 13, 1, 9]])
几个重要属性
a.ndim
轴的维度,通常为2(不是矩阵意义上的秩),求矩阵的秩:
np.linalg.matrix_rank(a)
a.shape
返回一个tuple,(m,n)分别表示行和列
a.size
数组中数据项的个数
\(size=m\times n(m,n=a.shape)\)
a.dtype
返回datatype
a.itemsize
每个数据项所占用的字节(Byte)数
a.data
返回一个实际的缓冲区,通常用不到,因为我们一般都是通过索引访问的
创建数组
主要通过两类方法
- 使用array函数创建
data = np.array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=float) #可以指定数据类型
- 使用函数创建特殊矩阵,例如:
a1 = np.zeros((3,4)) #0矩阵
a2 = np.ones((3,4)) #1矩阵
a3 = np.empty((3,4)) #空矩阵,内容根据内存完全随机,使用前要初始化
a4 = np.eye(5) #5x5单位矩阵
a5 = np.arange(10,30) #和python的range类似
a6 = np.linspace(2, np.pi, 10) #linear space线性等分函数
a7 = np.random.rand(1,100,size=(3,4)) #普通的随机矩阵
打印数组
输出直接print即可
In [79]: b = np.arange(12).reshape(2,2,3)
In [80]: print b
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
有时候数据量过多,numpy会隐藏中间的一些数据,使用···表示,如果想要全部显示,可以使用
np.set_printoptions(threshold='nan')
基本运算
基本运算都是逐元素运算,产生一个新数组
>>> a = array( [20,30,40,50] )
>>> b = arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([True, True, False, False], dtype=bool)
# 关于bool运算,还可以使用a.all()>35 a.any()>35返回唯一值
关于乘法
c = a * b #是逐个元素相乘
c = np.dot(a,b) #是矩阵相乘
简单函数
In [88]: a = np.random.randint(1,100,size=(3,4))
In [89]: a
Out[89]:
array([[64, 42, 17, 18],
[42, 9, 26, 91],
[85, 16, 9, 46]])
In [90]: a.sum() #所有元素之和
Out[90]: 465
In [91]: a.sum(axis=0) #行相加,axis=0表示把每一行看成一个元素,axis=1表示列
Out[91]: array([191, 67, 52, 155])
In [92]: a.min() #全局最小
Out[92]: 9
In [93]: a.cumsum() #全局累计和
Out[93]: array([ 64, 106, 123, 141, 183, 192, 218, 309, 394, 410, 419, 465])
In [94]: a.cumsum(axis=0) #行累积和
Out[94]:
array([[ 64, 42, 17, 18],
[106, 51, 43, 109],
[191, 67, 52, 155]])
In [95]: a.cumsum(axis=1) #列累积和
Out[95]:
array([[ 64, 106, 123, 141],
[ 42, 51, 77, 168],
[ 85, 101, 110, 156]])
访问数据
numpy访问数据的方法与MATLAB类似,主要是切片、索引、迭代
- 切片
In [113]: a = np.arange(12).reshape(3,4)
In [114]: a
Out[114]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [115]: a[1:3,:] #切片以逗号分割维度,1:3表示[1,3)的索引范围,跟list一致
Out[115]:
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
索引
取整行
a[1]
取整列
a[:,2]
取元素
a[2,2]
迭代
In [119]: for row in a: #默认为行遍历
...: print row
In [120]: for x in a.flat: #flat可以把数组变成一维
...: print x
合并和分离
合并
In [131]: a = np.arange(6).reshape(2,3)
In [132]: b = np.ones((2,3))
In [133]: np.vstack((a,b)) #竖直堆放
Out[133]:
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
In [134]: np.hstack((a,b)) #水平堆放
Out[134]:
array([[ 0., 1., 2., 1., 1., 1.],
[ 3., 4., 5., 1., 1., 1.]])
分离
In [136]: c
Out[136]:
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
In [137]: np.vsplit(c,2) #分成上下两组
Out[137]:
[array([[ 0., 1., 2.],
[ 3., 4., 5.]]), array([[ 1., 1., 1.],
[ 1., 1., 1.]])]
In [142]: np.hsplit(c,3) #分成左右3组
Out[142]:
[array([[ 0.],
[ 3.],
[ 1.],
[ 1.]]), array([[ 1.],
[ 4.],
[ 1.],
[ 1.]]), array([[ 2.],
[ 5.],
[ 1.],
[ 1.]])]
拷贝
In [144]: b = a #浅拷贝,b和a引用同一块内存
In [145]: a is b
Out[145]: True
In [146]: b = a.copy() #深拷贝,b指向新的内存,其内容从a拷贝得到
In [147]: b is a
Out[147]: False
numpy快速入门的更多相关文章
- NumPy快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法.下面记录相关学习笔记. 简介 NumPy是一个科学计算库.结合Py ...
- Numpy快速入门——shape属性,你秒懂了吗
前言 对于学习NumPy(Numeric Python),首先得明确一点是:Numpy 是用来处理矩阵数组的. shape 属性 对于shape函数,官方文档是这么说明: the dimensions ...
- Jupyter Notebook 快速入门
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...
- h5py快速入门指南
h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/latest/quick.html ...
- pandas快速入门
pandas快速入门 numpy之后让我们紧接着学习pandas.Pandas最初被作为金融数据分析工具而开发出来,后来因为其强大性以及友好性,在数据分析领域被广泛使用,下面让我们一窥究竟. 本文参考 ...
- Jupyter 快速入门——写python项目博客非常有用!!!
from:https://blog.csdn.net/m0_37338590/article/details/78862488 一.简介: Jupyter Notebook(此前被称为 IPython ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...
- Pandas 快速入门(二)
本文的例子需要一些特殊设置,具体可以参考 Pandas快速入门(一) 数据清理和转换 我们在进行数据处理时,拿到的数据可能不符合我们的要求.有很多种情况,包括部分数据缺失,一些数据的格式不正确,一些数 ...
- Jupyter Notebook 快速入门[转]
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...
随机推荐
- JDK1.8 JVM参数配置
JAVA_OPTS=" -server #服务器模式 -Xmx4g #JVM最大允许分配的堆内存,按需分配 -Xms4g #JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次gc后JV ...
- ASP.NET Core Middleware管道介绍
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Use(async (context, ne ...
- 1. ELK 之elasticsearch 简介、获取、安装
简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...
- Application Initialization UI for IIS 7.5
IIS Application Initialization for IIS 7.5 enables website administrators to improve the responsiven ...
- WPF: Hide grid row
http://stackoverflow.com/questions/2502178/wpf-hide-grid-row Setting all the Items in the Row to Vis ...
- Codeforces 781E Andryusha and Nervous Barriers 线段树 单调栈
原文链接https://www.cnblogs.com/zhouzhendong/p/CF781E.html 题目传送门 - CF781E 题意 有一个矩形,宽为 w ,高为 h .一开始会有 w 个 ...
- tomcat多端口配置
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" sh ...
- 空间数据可视化:1. 3D_Bar图表| 空间柱状图
1.Sublime的使用 中文版的配置 https://jingyan.baidu.com/article/ca2d939d1e83feeb6c31cefc.html (百度经验) sublime里边 ...
- 20165220 实验三 敏捷开发与XP实践 实验报告
实验三 敏捷开发与XP实践-1 实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA ...
- 使用PHPStorm 配置自定义的Apache与PHP环境
使用PHPStorm 配置自定义的Apache与PHP环境之一 关于phpstorm配置php开发环境,大多数资料都是直接推荐安装wapmserver.而对于如何配置自定义的PHP环境和Apach ...