python中numpy基础学习及进行数组和矢量计算


Posted in Python onFebruary 12, 2017

前言

在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率,类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算。

下面来看下简单的例子

import numpy as np
 
data=np.array([2,5,6,8,3]) #构造一个简单的数组
 
print(data)

结果:

[2 5 6 8 3]
data1=np.array([[2,5,6,8,3],np.arange(5)]) #构建一个二维数组
 
print(data1)

结果:

[[2 5 6 8 3]
[0 1 2 3 4]]

我们也可以通过shape和dtype方法查看数组的维度和数据格式

print(data.shape)
print(data.dtype)
print(data1.shape)
print(data1.dtype)

结果:

(5,)
int32

(2, 5)
int32

可以看出data是一维数组,每组元素为5个,数据类型为32位int 类型

data1 为二维数组,每个组有5个元素,数据类型为32位int类型

有一个较好的区分方法是看打印结果中,中括号的层数和位置,就可以看出数组的维度,一层中括号代表一个维度。

其他的数组属性方法还有:

array.ndim   数组的维数,一维数组结果为1,二维数组打印结果为2

array.size     数组的元素个数

array.itemsiz   数组每个元素的字节大小

接下来我们了解下数组中的数据类型:

NumPy中的基本数据类型 

名称 描述
bool 用一个字节存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8 一个字节大小,-128 至 127
int16 整数,-32768 至 32767
int32 整数,-2 ** 31 至 2 ** 32 -1
int64 整数,-2 ** 63 至 2 ** 63 - 1
uint8 无符号整数,0 至 255
uint16 无符号整数,0 至 65535
uint32 无符号整数,0 至 2 ** 32 - 1
uint64 无符号整数,0 至 2 ** 64 - 1
float16 半精度浮点数:16位,正负号1位,指数5位,精度10位
float32 单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float 双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex 复数,分别用两个64位浮点数表示实部和虚部

基础的数组运算

数组也可以进行我们常用的加减乘除运算

arr=np.array(np.arange(10))
arr1=np.array(np.arange(1,11))
print(arr*2)

结果:

[ 0 2 4 6 8 10 12 14 16 18]
print(arr+arr1)

结果:

[ 1 3 5 7 9 11 13 15 17 19]

注意,相加两个数组长度要一样

接下来我们看下数组索引

arr=np.arange(10)

用下标直接进行索引

print(arr[5])

结果为:

5

切片索引

print(arr[5:8])

结果为:

[5 6 7]

可以利用索引对数据进行更改操作

arr[5]=120
print(arr)

结果为:

[ 0 1 2 3 4 120 6 7 8 9]

可以看到下标为5的数已经变成120了。

此外,数组还可以进行布尔操作

arr=np.arange(5)
name=np.array(['a','b','b','c','a'])
print(name=='a')

结果为:

[ True False False False True]

即满足条件的数据全部以True的结果输出。

接下来我们可以利用name数组设置条件后的布尔值对arr数组进行相关操作

print(arr[name=='a'])

结果为:

[0 4]

即把arr中对应于name中a相对应位置的元素打印出来。

多条件操作

result=(name='a')|(name='c')
print(result)
print(name[result])

结果为:

[ True False False True True]
['a' 'c' 'a']

接下来,我们了解下ufunc方法

用于操作单个数组的函数有如下:

python中numpy基础学习及进行数组和矢量计算

用于操作两个或多个数组的方法

python中numpy基础学习及进行数组和矢量计算

相关的函数方法使用

np.meshgrid 用于生成多维矩阵

a,b=np.meshgrid(np.arange(1,5),np.arange(2,4))
print(a)
print(b)

结果为:

[[1 2 3 4]
[1 2 3 4]]
[[2 2 2 2]
[3 3 3 3]]

按照数据最少的数组形成数组

np.where 是三元表达式  x if  condition  else y的矢量化版本

arr1=np.arange(5)
arr2=np.arange(20,25)
condition=np.array([1,0,1,0,0])
result=np.where(condition,arr1,arr2)
print(arr1)
print(arr2)
print(result)

结果为:

[0 1 2 3 4]
[20 21 22 23 24]
[ 0 21 2 23 24]

可以看出,result的结果中,条件为1的显示数组arr1的内容,条件为0的显示arr2的内容

数学统计方法

在数组中我们也可以使用数学统计方法进行计数,例如sum mean  std  等

arr=np.random.randint(1,20,10)
print(arr)
print(np.mean(arr))
print(np.sum(arr))
print(np.std(arr))

结果为:

[19 14 8 13 13 10 10 9 19 7]
12.2
122
4.01995024845

具体的方法内容如下图所示:

python中numpy基础学习及进行数组和矢量计算

布尔型数组的相关统计方法

arr=np.arange(-20,10)
result=(arr>5).sum()
print(arr)
print(result)

结果为:

-20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3
-2 -1 0 1 2 3 4 5 6 7 8 9]

4

可以对数据进行判断后进行个数求和

其他的数组方法还有

python中numpy基础学习及进行数组和矢量计算

数据的读取和存储

python中numpy基础学习及进行数组和矢量计算 

线性函数的常用方法

arr=np.array([np.random.randint(1,10,5),np.random.randint(10,20,5)])
print(arr)
print(np.dot(arr,2))

结果为

[[ 4 6 5 1 6]
[14 16 11 10 18]]
[[ 8 12 10 2 12]
[28 32 22 20 36]]

dot方法可以进行矩阵相乘操作

其他方法如下图

python中numpy基础学习及进行数组和矢量计算 

最后我们了解下numpy中的随机数生成方法

上面的很多例子中我们已经用到了随机数生成,

arr=np.random.random(10)
print(arr)

结果为

[ 0.90051063 0.72818635 0.00411373 0.13154345 0.45513344 0.9700776
0.42150977 0.27728599 0.50888291 0.62288808]

其他形式的随机数生成方法

python中numpy基础学习及进行数组和矢量计算

总结

好了,以上就是这篇文章的全部内容了,了解了以上numpy的操作方法,基本的数据操作问题应该不是很大了。希望本文的内容对大家的学习或者工作能带来一定的帮助。

Python 相关文章推荐
python用来获得图片exif信息的库实例分析
Mar 16 Python
python验证码识别的示例代码
Sep 21 Python
python获取多线程及子线程的返回值
Nov 15 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
python机器学习之神经网络实现
Oct 13 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 #Python
python3制作捧腹网段子页爬虫
Feb 12 #Python
python日志记录模块实例及改进
Feb 12 #Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 #Python
使用Python绘制图表大全总结
Feb 11 #Python
Python 绘图和可视化详细介绍
Feb 11 #Python
Python实现多线程HTTP下载器示例
Feb 11 #Python
You might like
建立动态的WML站点(三)
2006/10/09 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
laravel学习教程之存取器
2016/07/30 PHP
php格式化时间戳
2016/12/17 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python访问类中docstring注释的实现方法
2015/05/04 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
服务承诺书格式
2014/05/21 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书