Python数据分析工具库-Numpy 数组支持库(一)
1 Numpy数组
在Python中有类似数组功能的数据结构,比如list
,但在数据量大时,list
的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据进行快速处理的函数,Numpy中内置函数处理数据的速度是C语言级别的。Numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy中的ndarray
类提供了python对多维数组对象的支持,并具备对矢量进行运算的能力,运算更为快速且节省空间。
ndarray
是N维数组对象(矩阵),其中所有的元素都必须是相同类型。ndarray
主要包含以下几个属性:
ndarray.ndim
:表示数组对象或矩阵的维度;
ndarray.shape
:表示每个维度上的数组的大小;
ndarray.size
:表示数组中元素的总数,等同于ndarray.shape中两个元素的乘积;
ndarray.dtype
:表示数组中元素的类型;
ndarray.itemsize
:表示数组中每个元素的字节大小,比如数据类型为float64的数组,其元素的字节大小为64/8=8。
比如:
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
2 创建Numpy数组
array方法
>>> import numpy as np
>>> a = np.array([2,3,4])#创建一维数组
>>> b = np.array([(1.5,2,3), (4,5,6)])#创建二维数组
>>> c = np.array( [ [1,2], [3,4] ], dtype=float64 )#创建指定数据类型的数组
如果想创建指定shape的数组,并使用占位符来初始化数组,可以用以下方法:
>>> np.zeros( (3,4) )#创建3行4列矩阵,用0初始化矩阵中所有的元素
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 ) #创建三维矩阵,维度分别为2,3,4,且用1来初始化矩阵中所有的元素
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) ) #创建2行3列空矩阵,矩阵中元素初始值随机,取决于内存状态,默认情况下,创建的数组的dtype为float64。
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
对应的zeros、ones、empty
还有zeros_like、ones_like、empty_like
,它们以另一个数组为参数,根据其形状和dtype创建数组。
arange方法,与Python内置的range相似:
>>> numpy.arange(6)
array([0,1,2,3,4,5,])
>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
3 数组基本数学操作
加、减、乘、点乘
>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])
>>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A*B #矩阵相乘
array([[2, 0],
[0, 4]])
>>> A.dot(B) #矩阵点乘
array([[5, 4],
[3, 4]])
>>> np.dot(A, B) #矩阵点乘
array([[5, 4],
[3, 4]])
叠加、叠乘
>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
[3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022 , 3.72032449, 3.00011437],
[ 3.30233257, 3.14675589, 3.09233859]])
>>> a += b #浮点型不能转换成整型
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
取最大、最小、求和
>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021, 0.34556073, 0.39676747],
[ 0.53881673, 0.41919451, 0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595
对于多维矩阵,只在其中指定轴进行操作,使用axis
参数
>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b.sum(axis=0) #对二维矩阵的列轴进行求和
array([12, 15, 18, 21])
>>> b.min(axis=1) #求二维矩阵的每个横轴最小值
array([0, 4, 8])
通用函数(ufunc),对ndarray
中的数据执行元素级运算,比如sin、cos、exp
等:
>>> B = np.arange(3)
>>> B
array([0, 1, 2])
>>> np.exp(B)
array([ 1. , 2.71828183, 7.3890561 ])
>>> np.sqrt(B)
array([ 0. , 1. , 1.41421356])
>>> C = np.array([2., -1., 4.])
>>> np.add(B, C)
array([ 2., 0., 6.])
4 数组的索引、切片和遍历
和Python的list
数据结构类似,Numpy的一维数组也可以进行索引、切片以及遍历。
>>> a = np.arange(10)**3
>>> a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000 #从0-6的元素中,每隔2个将元素值重新赋值为-1000
>>> a
array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])
>>> for i in a:
... print(i + 1)
-999
2
-999
28
-999
126
217
344
513
730
二维数组的索引、切片:
>>> def f(x,y):
... return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int) #函数式创建数组,fromfunction第一个参数为函数f,第二个参数为数组的shape,shape第一个参数为函数f第一个参数的取值范围,第二个参数为函数f第二个参数的取值范围,dtype表示数组元素类型。
>>> b
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
>>> b[2,3] #不是数组b中的第2行第三列的元素,而是索引为[2,3]的元素
23
>>> b[0:5, 1] #取出从第0行到第5行的第2个元素组成数组
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1] #等同于前一句
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ] #取出第2行与第3行的所有元素组成数组
array([[10, 11, 12, 13],
[20, 21, 22, 23]])
>>> for row in b: #遍历得到b数组的每一行元素
... print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
>>> for element in b.flat: #遍历得到b数组的每一个元素
... print(element)
...
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43
多维数组的索引、切片:
>>> c = np.array( [[[ 0, 1, 2],
... [ 10, 12, 13]],
... [[100,101,102],
... [110,112,113]]])
>>> c.shape
(2, 2, 3)
>>> c[1,…] #等同于 c[1,:,:] or c[1]
array([[100, 101, 102],
[110, 112, 113]])
>>> c[...,2] #等同于 c[:,:,2]
array([[ 2, 13],
[102, 113]])
参考文献
Numpy API文档:https://docs.scipy.org/doc/
Python数据分析工具库-Numpy 数组支持库(一)的更多相关文章
- Python数据分析工具库-Numpy 数组支持库(二)
1 shape变化及转置 >>> a = np.floor(10*np.random.random((3,4))) >>> a array([[ 2., 8., 0 ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- Python数据分析工具:Pandas之Series
Python数据分析工具:Pandas之Series Pandas概述Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建.Pandas纳入大量库和标准数据模型,提供高效的操作数 ...
- $python数据分析基础——初识numpy库
numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...
- Python数据分析--工具安装及Numpy介绍(1)
Anaconda 是一个跨平台的版本,通过命令行来管理安装包.进行大规模数据处理.预测分析和科学计算.它包括近 200 个工具包,大数据处理需要用到的常见包有 NumPy . SciPy . pand ...
- ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed
习惯了linux下用pip install numpy及pip install pandas命令了.折腾了好久了. 上来先在python3中pip3 install numpy装了numpy,然后再p ...
- python数据分析三剑客之: Numpy
数据分析三剑客之: Numpy 一丶Numpy的使用 numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...
- [读书笔记] Python数据分析 (四) 数组和矢量计算
Numpy:高性能计算和数学分析的基础包 ndarray, 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对数组数据进行快速运算的标准数学函数 用于读写磁盘数据的工具和用于操作内存 ...
- python数据分析工具安装集合
用python做数据分析离不开几个好的轮子(或称为科学棧/第三方包等),比如matplotlib,numpy, scipy, pandas, scikit-learn, gensim等,这些包的功能强 ...
随机推荐
- 论mysql主从复制里面的那些坑
1.找好配置文件,修改对的配置文件,有的时候会有多个配置文件,要搞清楚加载的哪个配置文件. 2.主库备份钱的操作除了设置 只读状态外,还要设置全局只读=1. 3.mysqldump备份sql很方便,恢 ...
- web常用的正则表达式
1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$" //非负整数(正整数 + 0) 3. "^[0 ...
- bat取时间间隔
@echo off echo 现在时间是%time:~,%点%time:~,%分%time:~,%秒 ,%%time:~,%%time:~,% pause echo 现在时间是%time:~,%点%t ...
- java框架复习 简单介绍 (转载)
一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...
- css选择器,样式表导入
css笔记1.选择器(selecter)共9种 a.类型选择器 p{},body{} b.后代选择器 p h1{} c.ID选择 #idname{} d.类选择 .classname{} e.通用选择 ...
- 苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置
苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置,首先要做好如下的准备: 第一:数据的备份:第二:保证正常的wifi连接:第三:有线的鼠标键盘连接: 具体恢复操作步骤: 步骤一:电脑 ...
- jQuery Nestable2 使用总结
最近,因为公司的一个新项目,用了一个基于bootstrap二次改造的国外友人的框架.感觉很一般吧,要求更换框架,客户拒绝.只能搞这个,发现里面一个jQuery插件-[Nestable]但是源作者长时间 ...
- jekyll建站详细教程
Jekyll是一款静态博客生成器,也是github page支持的后台引擎,所以如果你有以下需求,极力推荐使用jekyll搭建博客,>>浏览我的博客 个性化的展示界面,站点逻辑 个性化的域 ...
- springboot之websocket,STOMP协议
一.WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 ...
- P3877 [TJOI2010]打扫房间
xswl以为是个插头dp,然后发现就是个sb题 相当于就是个匹配.每个格子度数为2,所以可以匹配2个相邻的点.匹配显然的用网络流.最后check有没有不匹配的点即可. #include<bits ...