软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 编程语言 -> Python -> 正文阅读

[编程语言]Python


前言


这两天读完《利用Python进行数据分析》 这本书的第4章:NumPy 基础:数组和矢量计算 后,在进行下一步阅读高级应用前,先整理本章内容,做个笔记备查,也好加深印象。在往下看前请确保你已经安装了NumPy 库,并且已经使用 import numpy as np 加载numpy库。如果 还没有安装,那么可以在cmd(windows下)中使用 pip install numpy 命令安装,ubuntu下也可以使用 sudo apt-get install python-numpy 命令安装。
题外话:python的数据格式让我这种熟练了matlab的用户感觉好不习惯。>_<|||

创建数组,数组索引以及类型转换


  1. 使用np.array来创建数组(ndarray),每个数组都有shape属性和dtype属性,shape表示数组维数,dtype 表示数组元素类型。
    [img]http://img.blog.csdn.net/20160403090825671

  2. 使用astype 方法转换数组的dtype这个方法不会对原数组进行改动,会创建一个新的数组,也就是说原数组还是原来的dtype
    [img]http://img.blog.csdn.net/20160403091400064

  3. 使用np.zeros(), np.ones(), np.eye(), np.empty() 创建特殊数组,这一点和matlab还是差不多的,不过需要注意的是,如果你要创建一个2*3的全零数组,那么就应该这么写:np.zeros((2, 3)) ,也就是说传入的是一个元祖,如果你熟悉matlab你可能就会直接写np.zeros(2, 3),这在python中是不正确的。此外,在用np.empty()创建空数组时,实际上返回的并不是空数组,而是一些未初始化的垃圾值。np.arange() 是一个很有用的函数,返回给定范围内的连续值,注意下标从0开始,不包括末尾值
    [img]http://img.blog.csdn.net/20160403092419162

  4. 下面是一些常用的数组创建函数
    [img]http://img.blog.csdn.net/20160403093425933
  5. 数组索引和matlab相同点还是很多的,只是这里面可以用负数来表示从后往前数以及不包括冒号后面的索引(左闭右开区间)等等。有一点很需要注意,数组切片是原始数组的视图,这就是说数据不会被复制到新的数组切片上,对数组切片的任何修改都会直接反应到原数组上,或者说数组切片只是一个对原数组内容的引用, 如下图。
    [img]http://img.blog.csdn.net/20160403094835329
    如果不想要这样的效果,想要一个独立的新数组,那么需要使用显示复制函数,例如arr_independent = arr[5:8].copy()
    对于多维数组的索引,需要注意的是有一个“轴”的问题(matlab用户肯定很奇怪),其实就是行和列,下面有个图说明。
    [img]http://img.blog.csdn.net/20160403095647176
    再用个例子来说明下高维数组的索引方式。
    [img]http://img.blog.csdn.net/20160403100051490
    除此之外还有一个布尔型索引,这个和matlab是一样的。

数组转置和轴对称

  1. 对于二维数组,可以使用T方法进行转置。
    [img]http://img.blog.csdn.net/20160403151711801
  2. 对于高维数组,需要用到 数组的transpose函数,参数是一个由轴编号组成的元祖,下面引用一段官网对其参数的解释,
    [img]http://img.blog.csdn.net/20160403152111880
    如果传入的是一个元组,那么假设用i表示第j(从0开始)个位置的数值,那么转置之后的数组的第j个轴就是原数组的第i个轴(不得不吐槽这什么玩意儿,太别扭了),下面用一个例子来说明,
    [img]http://img.blog.csdn.net/20160403152754836
    这里原始数组是一个2×2×4的三维数组,transpose的参数是元组(1, 0, 2),对应的下标索引为(0, 1, 2),对比可以知道,arr.transpose(1, 0, 2) 的意思就是将原数组 arr 的(0, 1)位置和(1, 0)位置互换,以此类推。

简洁的where函数


numpy.where 函数是三元表达式 x if condition else y 的矢量化版本。

其实和 Java 中的问号表达式也是异曲同工。这种用法很多时候真的很方便(废话),比如图像处理中我想把像素矩阵中大于110的全都置为1,小于110的都置为0,那么就可以这么写np.where(matrix > 110, 1, 0)。 同样用随机数举一个例子,
[img]http://img.blog.csdn.net/20160403154635077

数学和统计函数


主要就是计算均值、方差、求和、最大值、最小值、累计和和累计积等。
需要注意的:假设有一个 5×4 的二维数组 arr ,那么np.mean(arr) 表示对整个二维数组的平均,即全部加起来除以个数,并不是matlab中的默认对列求平均。如果想要得到对某个轴向求平均,可以加上axis参数,如np.mean(arr, 1) 就是对行求平均。其他函数类似。
[img]http://img.blog.csdn.net/20160403160128177
基本数组统计方法
[img]http://img.blog.csdn.net/20160403160546632
[img]http://img.blog.csdn.net/20160403160607054

线性代数

  • 矩阵乘法:使用dot函数而不是 *,使用 * 得到的结果等于是matlab中使用点乘.* 的结果,使用dot函数才是真正的矩阵乘法。
  • 矩阵求逆、矩阵分解、行列式:函数名同matlab,使用前要先导入:from numpy.linalg import inv, qr 等等,以此类推。
  • 一些常用的线代函数
    [img]http://img.blog.csdn.net/20160403161819324

随机数的生成


这里着重说一下randnnormal。 书上在使用randn 的时候都是直接使用,但是我自己输入的时候却必须要这样np.random.randn。 此外,randn 默认只能生成标准正太分布的随机数,想要使用randn来生成非标态分布的随机数,那么可以这么写:sigma * np.random.randn(size) + mu 。但是使用normal就可以轻松的生成各种正态分布的随机数:normal(loc=0.0, scale=1.0,size=None),loc是均值,scale是标准差
randint 是从给定的范围内随机选取整数,注意是闭区间
部分numpy.random函数
[img]http://img.blog.csdn.net/20160403163435924
[img]http://img.blog.csdn.net/20160403163450940

最后,MATLAB和NumPy


NumPy很多地方都是借鉴matlab的,所以说有很多相似之处,也有一些不同之处,可以参考下面的对照表,表格来自Numpy for Matlab users
[img]http://img.blog.csdn.net/20160403163944957
[img]http://img.blog.csdn.net/20160403164021817
[img]http://img.blog.csdn.net/20160403164057755
[img]http://img.blog.csdn.net/20160403164131020
[img]http://img.blog.csdn.net/20160403164211880
[img]http://img.blog.csdn.net/20160403164251771

真的最后 the real END


关于数组的集合运算以及我的一些测试(太懒就不写了,直接拍我记在书上的。。),就是setdiff1d(x, y)setxor1d(x, y) 的一些细微差别,后者对于x和y的顺序貌似不感冒,如有错,欢迎指正!
[img]http://img.blog.csdn.net/20160403164732492
断断续续写了快一天,我真是服了,whatever,its done!
See you~
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:43:25  
编程语言 最新文章
Java面试题(1)
ReactiveX序列——RxSwift
C++STL之ACM相关知识大全
c++中vector向量几种情况的总结(向量指针,
SSH框架整合demo
JAX
UVA
curl备忘(1)
C#机房重构——万事开头难(二)
OJ刷题
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-16 17:10:40
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --