Numpy
什么是Numpy:Numeric Python
Numpy模块是Python的一种开源的数值计算扩展。
1 一个强大的N维数组对象Array
2 比较成熟的(广播)函数库
3 用于整合(C/C++)和Fortran代码的工具包
4 实用的线性代数、傅里叶变换和随机数生成函数
5 numpy和稀疏矩阵运算包scipy配合使用更加强大
导入numpy库,并查看numpy版本
注意:numpy模块不是python自带的,需要自己安装的。pip install numpy
这是我要处理的图片 gtx.jpg
必须要先安装这个模块 Pillow ,才能支持除png之外的格式的图片的读取。因为没有安装Pillow模块,会有如下报错:
ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle
Pillow模块安装之后,就能正常读取图片内容了。
读取的数组,元素值范围0-255。
看来gtx 是numpy.ndarray类型的,如果需要对图片进行操作,是需要对numpy.ndarray的属性和方法熟悉的。下一步学习numpy.ndarray的属性和方法。
再定义一个数组gtx2,是由gtx转换而来的,变成如下图所示的样子了。
一、创建ndarray
1 使用np.array() 由python list创建
·numpy默认ndarray的所有元素类型是相同的
·如果传进来的列表中包含不同的类型,则统一为同一类型,优先级 str>float>int
numpy的3个属性:
1 shape 查看数组是几维的。
317 表示数组的高,行数
500 表示数组的宽,列数
3 表示颜色
任何一张二位的图片转化为3维数组,长宽最后一维表示颜色。
数组元素统一成同一种数据类型的元素
n1.ndim 得到数组的维度数
2 使用np的routines函数创建数组
包含以下常见创建方法:
1)np.ones(shape,dtype=None,order='C') one表示创建的数组元素全是1
2)np.zeros(shape,dtype=float,order='C') zero表示创建的数组元素全是0
3)np.full(shape,fill_value,dtype=None,order='C') full表示可以自定义元素值fill_value
4)np.eye(N,M=None,k=0,dtype=float) 对角线位置元素值为1,其他位置为0 满秩矩阵 N、M用来定义矩阵的高和宽的。
这就是一个一元十次方程简化成这样,在线性代数中叫做满秩。
5)np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
6)np.arange([start,]stop,[step,]dtype=None) 左闭右开区间
使用该方法创建ndarray时候,左闭右开。
7)np.random.randint(low,high=None,size=None,dtype='l')
8)np.random.randn(d0,d1...dn) 标准正态分布
9)np.random.normal(loc=0.0,scale=1.0,size=None)
scale值越大其波动越厉害,scale=0.0 就没有波动了。
10)np.random.random(size=None) 生成0到1的随机数,左闭右开
随机生成一张图片。png格式的像素值 0-1 jpg格式像素值0-255
=====================================
三、ndarray的基本操作
1、索引
一维与列表完全一致 多维时同理
2、切片
一维与列表完全一致,多维时同理
比如一个3维数组, n1[0:2,1:3,-2:-1] 最终切到要的元素。
3、变形 使用reshape函数,注意参数是一个tuple,如果参数是个负数,直接转换成一维数组ndarray,不论负数值是多少。比价省事的做法就是 -1。
4、级联 (将两个数组拼接在一起)
·1 np.concatenate() 级联需要注意的点:
·2 级联的参数是列表:一定要加中括号或小括号
·3 维度必须相同
·4 形状相符
·5 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
·6 可通过axis参数改变级来联的方向
axis = 0表示按行
axis = 1表示按列
1. np.hstack 与 np.vstack
水平级联与垂直级联,处理自己,进行维度的变更。
5、切分
与级联类似,三个函数完成切分工作:
· np.split
· np.vsplit 按行切
· np.hsplit 按列切
split默认情况下是对行进行切分
Signature: np.split(ary, indices_or_sections, axis=0)
ary 是要切割数数据源
axis = 0 是对行进行切割 axis= 1 是对列进行切分
6、副本
所有赋值运算不会为ndarray的任何元素创建副本,对赋值后的对象的操作也对原来的对象生效。可以使用copy()函数创建副本。
==============================
四:ndarray的聚合操作
1、求和 np.sum
2、最大最小值:np.max / np.min
3、其他聚合操作
np.sum
np.prod
np.mean 平均值 axis 的值是维度
np.std 标准方程
np.var
np.min
np.max
np.argmin
np.argmax
np.median
np.percentile
操作文件:使用pandas打开文件president_heights.csv获取文件中的数据。
就把文件内容读取出来了。CSV格式比较经常遇到的,就是从Oracle数据库中导出的文件。
五、ndarray的矩阵操作
1.基本矩阵操作
1)算术运算符:
·加减乘除
2)矩阵积 np.dot()
2.广播机制
【重要】ndarray广播机制的两条规则
· 规则一:为缺失的维度补 1 (补一行或一列)
· 规则二:假定缺失元素用已有值填充
六、ndarray的排序,排序算法,面试经常问。
1 快速排序
np.sort()与ndarray.sort()都可以,但有区别:
· np.sort()不改变输入
· ndarray.sort()本地处理,不占用空间,但改变输入
2 部分排序
np.partition(a,k)
有时我们不是对全部数据感兴趣,只对最小或最大的一部分感兴趣
· 当k为正时,我们想要得到最小的k个数
· 当k为负时,我们想要得到最大的k个数
只返回需要的这部分数,但这部分数是不会排序的。切片,排序即可。

- Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块
基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...
- 【Python 数据分析】Numpy模块
Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...
- python numpy模块
目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...
- Python及bs4、lxml、numpy模块包的安装
http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...
- numpy模块(对矩阵的处理,ndarray对象)
6.12自我总结 一.numpy模块 import numpy as np约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/referen ...
- Python3:numpy模块中的argsort()函数
Python3:numpy模块中的argsort()函数 argsort函数是Numpy模块中的函数: >>> import numpy >>> help(nu ...
- Day 19 numpy 模块
numpy 模块(多维数组) import numpy as np arr=np.array([1,2,3,4],[5,6,7,8]) print(arr) #[[1 2 3 4] #[5 6 7 8 ...
- Pathon中numpy模块
目录 numpy模块 切割矩阵 矩阵元素替换 矩阵的合并 通过函数创建矩阵 fromstring/fromfunctions 矩阵的运算 常用矩阵运函数 矩阵的点乘 矩阵的逆 矩阵的其他操作 nump ...
- 开发技术--Numpy模块
开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...
随机推荐
- 【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加 ...
- bzoj3771
http://www.lydsy.com/JudgeOnline/problem.php?id=3771 生成函数... 其实就是多项式乘法...lrj书上有一个通俗的解释... 然后就是这个样子,我 ...
- 【RAID在数据库存储上的应用 】
随着单块磁盘在数据安全.性能.容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁 ...
- Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存
一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字 -1 publish = ser ...
- easyui DatagrId 的实例讲解
下面是代码实现 @{ ViewBag.Title = "人员查找"; ViewBag.LeftWidth = "200px"; ViewBag ...
- flask web 表单验证 WTForms
简介 WTForms 是一个flask集成框架,或者说是库,用于处理浏览器表单提交的数据,它在flask-WTF的基础上扩展并添加了一些随手可得的精巧帮助函数,这些函数将会是在flask里使用表单更加 ...
- Unity通过指定摄像机截屏
简介 介于照抄网上之前的截图教程,然后在实际应用过程中出现了一些小小的问题,修正了一下下,特此分享一下 PS:代码在后面 原理 原理很简单,就是将一个相机的内容渲染到一个贴图上,然后将贴图保存为图片 ...
- MVC系列学习(六)-Razor语法
注:本次代码加了样式,样式如下 <style> div { border: 1px solid red; margin: 10px auto; ...
- JVM 垃圾回收器详解
小结: 新生代 串行Serial 并行 Parallel(关注吞吐量) 并行ParNew 老年代 串行 Serial Old 并行Para ...
- linux php全能环境一键安装,小白福利!
phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...