Python-NumPy基础

前言

这两天读完《利用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 表示数组元素类型。
  1. 使用astype 方法转换数组的dtype这个方法不会对原数组进行改动,会创建一个新的数组,也就是说原数组还是原来的dtype
  1. 使用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开始,不包括末尾值
  1. 下面是一些常用的数组创建函数
  1. 数组索引和matlab相同点还是很多的,只是这里面可以用负数来表示从后往前数以及不包括冒号后面的索引(左闭右开区间)等等。有一点很需要注意,数组切片是原始数组的视图,这就是说数据不会被复制到新的数组切片上,对数组切片的任何修改都会直接反应到原数组上,或者说数组切片只是一个对原数组内容的引用, 如下图。

如果不想要这样的效果,想要一个独立的新数组,那么需要使用显示复制函数,例如arr_independent = arr[5:8].copy()。 对于多维数组的索引,需要注意的是有一个“轴”的问题(matlab用户肯定很奇怪),其实就是行和列,下面有个图说明。

再用个例子来说明下高维数组的索引方式。

除此之外还有一个布尔型索引,这个和matlab是一样的。

数组转置和轴对称

  1. 对于二维数组,可以使用T方法进行转置。
  1. 对于高维数组,需要用到 数组的transpose函数,参数是一个由轴编号组成的元祖,下面引用一段官网对其参数的解释,

如果传入的是一个元组,那么假设用i表示第j(从0开始)个位置的数值,那么转置之后的数组的第j个轴就是原数组的第i个轴(不得不吐槽这什么玩意儿,太别扭了),下面用一个例子来说明,

这里原始数组是一个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)。 同样用随机数举一个例子,

====== 2016-06-27更新 ====== numpy.where 函数在求一个数组最大值/最小值所在位置的时候也很有用,例如:

其中另一种方法求最大值所在位置使用了numpy.argmax 函数,该函数可直接返回最大值位置(啰嗦了~~)。

数学和统计函数

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

基本数组统计方法

===== 2016-06-29更新 ===== 注意,numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,而pandas.std() 默认是除以n-1 的,即是无偏的,如果想和numpy.std() 一样有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0)

线性代数

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

随机数的生成

这里着重说一下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函数

最后,MATLAB和NumPy

NumPy很多地方都是借鉴matlab的,所以说有很多相似之处,也有一些不同之处,可以参考下面的对照表,表格来自Numpy for Matlab users

真的最后 the real END

关于数组的集合运算以及我的一些测试(太懒就不写了,直接拍我记在书上的。。),就是setdiff1d(x, y)setxor1d(x, y) 的一些细微差别,后者对于x和y的顺序貌似不感冒,如有错,欢迎指正!

断断续续写了快一天,我真是服了,whatever,its done!

See you~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第13章 Python建模库介绍13.1 pandas与模型代码的接口13.2 用Patsy创建模型描述13.3 statsmodels介绍13.4 sciki

本书中,我已经介绍了Python数据分析的编程基础。因为数据分析师和科学家总是在数据规整和准备上花费大量时间,这本书的重点在于掌握这些功能。 开发模型选用什么库...

6216
来自专栏CreateAMind

keras doc 8 BatchNormalization

该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1

1295
来自专栏大学生计算机视觉学习DeepLearning

手指静脉细化算法过程原理解析 以及python实现细化算法

1354
来自专栏人工智能LeadAI

你听过算法也是可以贪心的吗?

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法...

3617
来自专栏深度学习自然语言处理

PyTorch(总)---PyTorch遇到令人迷人的BUG与记录

BUG1 在使用NLLLoss()激活函数时,NLLLoss用来做n类分类的,一般最后一层网络为LogSoftmax,如果其他的则需要使用CrossEntrop...

6128
来自专栏人工智能LeadAI

使用TensorFlow实现手写识别(Softmax)

准备工作 由于将TensorFlow安装到了Conda的tensorflow环境,虽然可以用Jupyter notebook打开,但是没有提示,写代码不方便,所...

3655
来自专栏人工智能LeadAI

Tensorflow高级API的进阶--利用tf.contrib.learn建立输入函数

在实际的业务中,可能会遇到很大量的特征,这些特征良莠不齐,层次不一,可能有缺失,可能有噪声,可能规模不一致,可能类型不一样,等等问题都需要我们在建模之前,先预处...

33710
来自专栏AI科技大本营的专栏

如何快速优化机器学习的模型参数

【导读】一般来说机器学习模型的优化没什么捷径可循。用什么架构,选择什么优化算法和参数既取决于我们对数据集的理解,也要不断地试错和修正。所以快速构建和测试模型的能...

722
来自专栏算法channel

动态规划|约束条件下的三角最短路径

这篇文章总结了题目如何符合动态规划的特点,进而如何利用动态规划求解三角约束条件下的最短路径。 1 题目 Given a triangle, find the m...

3745
来自专栏IT派

用DaPy进行机器学习

DaPy自带了少量著名的数据集,比如用于分类问题的红酒分类和鸢尾花数据集。 接下来,我们首先启动一个Python Shell并加载作为例子的红酒数据集:

923

扫码关注云+社区