Python笔记-NumPy

本来在Xmind里面我的排版不是这样的,不过为了在这边逻辑脉络更清晰,可以细化。

这一章分为六个部分:

1⃣️NumPy的ndarray:一种多维数组对象

2⃣️通用函数:快速的元素级数组函数

3⃣️利用数组进行数据处理

4⃣️用于数组的文件输入输出

5⃣️线性代数

6⃣️伪随机数生成

我会根据自己做的导图来进行编辑~

01

NumPy的ndarray

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

最开始需要引入相应的包:

import numpy as np

创建ndarry

ndarry有以下三种分类:单一序列、嵌套序列及指定长度或形状序列。

单一序列为一维数组,嵌套序列将会被转换成一个多维数组,类似于zeros和ones函数则是创建指定类型的数组。

基本属性和数据类型

dtype是一个特殊的对象,含有ndarray将一块内存解释为特定数据类型所需的信息:

arr1=np.array([1,2],

dtype=np.int32)

arr1.dtype

=>dtype('int32')

astype可以将一个数组从宇哥dtype转换成另一个dtype:arr.dtype

=>

dtype('int64')

farr= arr.astype(np.float64)

farr.dtype

=>

dtype('float64')

arr.ndim,arr.shape用于验证数组的某些属性。

NumPy数组的运算

arr=np.array([[1.,2.,3.], [4.,5.,6.]])

大小相等的数组之间的任何算术运算都会将运算应用到元素级:

arr * arr

=>

array([[1.,4.,9.],

[16.,25.,36.]])

数组与标量的算术运算会将标量值传播到各个元素:

1 / arr

=>

array([[1.,0.5,0.3333],

[0.25,0.2,0.1667]])

大小相同的数组之间的比较会生成布尔值数组:

arr2=np.array([[0.,4.,1.], [7.,2.,12.]])

arr2 > arr

=>

array([[False, True, False],

[True, False, True]], dtype=bool)

基本的切片和索引

这一节的内容比较多,在思维导图上也比较详细,难度不大,主要是分为了一维、二维和三维数组,最后需要注意的是所有通过切片选取数组子集,返回的数组都是视图。

切片索引

个人觉得,切片索引和之前学过的C语言的数组遍历是有点像的,但是其内在逻辑又不一样,在Python中主要要注意冒号在切片中的重要作用。

关于切片的使用,需要多实践,在不同的地方取冒号及各个数值,才会慢慢有感觉。

布尔型索引

布尔型索引其实比较简单也比较好理解,不过导图里示例代码比较多,所以可能不太清晰,布尔型索引的逻辑是:数组中的每个元素都对应另外一个数组的每一行,当我们选出该数组中的某一个数组元素并且要指定他所对应的所有行,将该数组和该元素进行比较运算时就会产生一个布尔型数组。

废话有点多……可以直接看代码的……

花式索引

花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进行索引。

其实比较简单,但是由于二维数组的原因,不能截图,其中还是有需要注意的点:即正数索引和负数索引的区别。

数组转置和轴对换

这个部分主要是分为简单转置和高维数组的转置,简单转置直接使用.T就OK,但是高维数组的理解会比较麻烦。之后对比较难理解的点会单独写出来做笔记。

02

通用函数:快速的元素级数组函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。

基本形式:

arr=np.arange(10)

np.sqqt(np)

常用函数:

03

利用数组进行数据处理

NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化数组运算要比等价的纯Python方式快上一两个数量级(甚至更多),尤其是各种数值计算。

将条件逻辑表述为数组运算

其实在这个例子中,我们也可以用列表推导式if-else来实现,但是列表推导式对于大数组的处理速度不是很快,并且无法用于多维数组。所以从这个角度来说,使用numpy的数组运算更好。

数学和统计方法

和上面函数一样,有一个表格,之后的章节中用到的也比较多。

用于布尔型数组的方法

在上面这些方法中,布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数,any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True:

排序

排序仍然是利用sort()

分为一维数组和多维数组:

唯一化以及其它的集合逻辑

np.unique:找出数组中的唯一值并返回已排序的结果:

np.in1d:用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:

04

用于数组的文件输入输出

这个部分主要是讲了NumPy的内置二进制格式:

05

线性代数

和前面一样,线性代数部分也是需要了解一些公式:

06

伪随机数生成

random在后面用的非常多:

终于写完了emmm……

学习|思考 | 总结 | 观点

—MiaData—

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G1I8CY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券