利用python进行数据分析—四、Numpy基础:数组与向量化计算

引言

  Numpy的设计对于含有大量数组的数据非常有效。

  • Numpy在内部将数据存储到连续的内存块上,这与python其他内建数据结构不同。Numpy的算法库是用C写的,所以在操作数据内存时,不需要任何类型检查或者其他管理操作。Numpy数组使用的内存量小于其他python内建序列。
  • Numpy针对全量数组进行复杂计算而不需要写python循环。

4.1 ndarray:多维数组对象

4.1.1生成ndarray

数组生成函数如下:
在这里插入图片描述
在这里插入图片描述

4.1.2 ndarray的数据类型

  ndarray的数据类型有如下:
在这里插入图片描述
可以用astype方法来转换数组类型
在这里插入图片描述

4.1.3 Numpy数组算术

  数组允许进行批量操作而无须for循环。任何两个等尺寸数组之间的算术操作都应用了逐元素操作的形式。不同尺寸数组之间的操作将用到广播特性。
在这里插入图片描述

4.1.4基础索引与切片

  一维数组比较简单,看起来与列表类似,不过也有区别。数组的切片是原数组的视图,这就意味着数据并不是被复制了,任何对视图的修改都会反馈到原数组上。
在这里插入图片描述
  多维数组,省略后续索引值,返回的对象将是降低一个维度的数组。
在这里插入图片描述
  切片索引:单独一个:表示该轴上的所有数组。
在这里插入图片描述

4.1.5布尔索引

  在索引数组时可以传入布尔数组,布尔数组的长度必须和数组轴索引的长度一致。
常用符号有‘==’,‘!=’,‘~’(在条件表达式前取反)。
在这里插入图片描述
  需要使用布尔算术运算符&和|来组合多个布尔值条件
在这里插入图片描述
  基于常识设置布尔数组的值
在这里插入图片描述

4.1.6神奇索引

  使用整数数组进行数据索引。当只有一个索引数组时,该数组是一个包含指明所需顺序的列表或者数组。
在这里插入图片描述
  当传递进入的是多个数组时,会根据每个索引数组对应的元素选出一个一维数组。
在这里插入图片描述

神奇索引与切片不同,它总是将数组复制到一个新的数组中。

4.1.7数组转置与换轴

  数组的转置:transpose方法与T属性
在这里插入图片描述
  对于高维度数组,transpose方法,可以接收包含轴编号的元祖,用于置换轴。
在这里插入图片描述

4.2通用函数:快速的逐元素数组函数

  一元通用函数
在这里插入图片描述
在这里插入图片描述
  二元通用函数
在这里插入图片描述
在这里插入图片描述

4.3使用数组进行面向数组编程

  向量化的数组操作比纯python的等价实现在速度上快一到两个数量级(甚至更多),这对所有种类的数值计算产生了很大影响。

4.3.1将条件逻辑作为数组操作

  np.where函数是三元表达式x if cond else y 的向量化版本。向量化后速度更快,也适用于数组是多维的情况
在这里插入图片描述
  np.where函数的第二个与第三个参数可以是标量
在这里插入图片描述
  np.where函数的第二个与第三个参数也可以是将标量与数组联合
在这里插入图片描述

4.3.2基础数组统计方法

  这些方法可接受一个可选参数axis,axis=0表示跨行计算,axis=1表示跨列计算
在这里插入图片描述

4.3.3布尔值数组的方法

  对于布尔值数组,有两个非常有用的方法any和all。这两个方法也适用于布尔值数组,非0元素按照True处理。

any检查数组中是否至少有一个True
all检查数组中是否每个值都是True

在这里插入图片描述

4.3.4排序

  数组可以用sort方法进行排序,可选参数axis,沿着axis轴对每一个一维数据进行排序。np.sort()方法返回的是已经排序好的数组的拷贝,而不是对原数组按位置排序。
在这里插入图片描述

4.3.5唯一值与其他集合逻辑

  np.unique返回的是数组中唯一值排序后形成的数组。
在这里插入图片描述
  np.in1d:检查一个数组中的值是否在另一个数组中,并返回一个布尔值数组
在这里插入图片描述
数组集合操作:
在这里插入图片描述

4.4使用数组进行文件输入和输出

  numpy可以在硬盘中将数据以文本或二进制文件的形式进行存入硬盘或由硬盘载入。
np.save和np.load
在这里插入图片描述
可以使用np.savez将数组作为参数传递给该函数,用未压缩文件来保存多个数组

在这里插入图片描述
np.savez_compressed将数组存入已经压缩的文件
np.savetxt、np.loadtxt表示存取文本文件
在这里插入图片描述

4.5线性代数

  numpy中*是逐元素相乘,而不是矩阵的点积。矩阵的点积是np.dot(x,y)或者特殊符号@

在这里插入图片描述
np.linalg标准函数集(矩阵分解)
在这里插入图片描述
在这里插入图片描述

4.6伪随机数的生成

  np.random模块可以高效的生成多种概率分布下的完整样本值数组,弥补了python内建random模块的不足。
在这里插入图片描述
在这里插入图片描述

4.8示例:随机漫步

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46649052/article/details/114777237