[读书笔记] Python数据分析 (四) 数组和矢量计算

时间:2021-11-10 00:41:22

Numpy:高性能计算和数学分析的基础包

  • ndarray, 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
  • 用于对数组数据进行快速运算的标准数学函数
  • 用于读写磁盘数据的工具和用于操作内存映射文件的工具
  • 线性代数,随机数生成,傅里叶变换
  • 用于集成C,C++,Fortran等语言编写的代码工具(很容易将数据传给低级语言编写的外部库,外部库也能以Numpy数组形式将数据返回给python,使得python成为包装c/c++/Fortran历史代码库选择)

ndarray: N维数组对象,快速而灵活的大数据容器集,通用同构数据容器。

data.shape: 一个各维度大小的元组

data.dtype: 说明数组数据类型的对象

如何创建:

array()函数

[读书笔记] Python数据分析 (四) 数组和矢量计算

zeros(): 全零

[读书笔记] Python数据分析 (四) 数组和矢量计算

ones(): 全一

empty(): 垃圾值

arrange(): python内置函数range的数组版

[读书笔记] Python数据分析 (四) 数组和矢量计算

 所有数据类型默认float64

 [读书笔记] Python数据分析 (四) 数组和矢量计算

  [读书笔记] Python数据分析 (四) 数组和矢量计算

astype()类型转换:

 [读书笔记] Python数据分析 (四) 数组和矢量计算

数组和标量之间的运算:

相同大小之间的组和数组,数组与标量之间的运算都会将运算用到元素级

不同大小数组之间的运算叫做广播(broadcasting)

基本索引和切片:

和列表最重要的区别在于, 数组的切片是原始数组的视图(数据不会复制,视图上任何修改都会反映到源数组上)

原因:Numpy设计的目的是处理大数据,所以假如Numpy坚持将数据复制来复制去会产生性能和内存的问题

 [读书笔记] Python数据分析 (四) 数组和矢量计算

显示复制:copy()方法

[读书笔记] Python数据分析 (四) 数组和矢量计算

基本的索引和切片:

切片的时候区间同样是左开右闭:

[读书笔记] Python数据分析 (四) 数组和矢量计算

 [读书笔记] Python数据分析 (四) 数组和矢量计算

布尔值索引:布尔数组的长度必须和被索引的轴长度一致

通过布尔索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是这样

python 中的 and 和 or 在布尔数组中无效

花式索引:利用整数数组进行索引

和切片不一样总是将数据复制到新的数组当中

数组转置和轴对换

transpose()方法和T属性

[读书笔记] Python数据分析 (四) 数组和矢量计算

 高维数组转置: swapaxes transpose方法

快速的元素级数组函数

一元函数

[读书笔记] Python数据分析 (四) 数组和矢量计算

二元函数

[读书笔记] Python数据分析 (四) 数组和矢量计算

利用数组进行数据处理

矢量化:用数组表达式代替循环,矢量化数组运算比等价的纯python方式快1-2个数量级(甚至更多)

将条件逻辑转换为数组运算

np.where()

数学和统计方法

[读书笔记] Python数据分析 (四) 数组和矢量计算

用于布尔型数组的方法

any():测试数组中是否存在一个或者多个True

all(): 检查数组中所有值是否都是True

排序:

*方法np.sort()返回数组已排序副本

属性sort()修改数组本身

唯一化及其他的集合逻辑

np.unique()唯一化

[读书笔记] Python数据分析 (四) 数组和矢量计算

np.in1d()测试数组中值在另一个数组中的成员资格

[读书笔记] Python数据分析 (四) 数组和矢量计算

集合函数:

[读书笔记] Python数据分析 (四) 数组和矢量计算

数组文件输入输出

np.save()/np.savez()

np.load()

线性代数

dot():既是数组方法也是numpy命名空间中的一个函数

numpy.linalg库中有一组标准矩阵分解运算以及求诸如逆和行列式之类的东西

[读书笔记] Python数据分析 (四) 数组和矢量计算

随机数生成

[读书笔记] Python数据分析 (四) 数组和矢量计算