提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
提示:以下是本篇文章正文内容,下面案例可供参考
NumPy 是 Numerical Python 的缩写,是 Python 中最重要的数值计算基础包之一
1.NumPy
1. NDRarray,一个高效的多维阵列
2. 用于对整个数据数组进行快速操作的数学函数,而无需编写循环
3. 用于将阵列数据读取/写入磁盘和处理内存映射文件的工具
4. 线性代数、随机数生成和傅里叶变换功能
5. 一个 C API,用于将 NumPy 与用 C、C++ 或 FORTRAN 编写的库连接起来
NumPy 本身不提供建模或科学功能
2.对于大多数数据分析应用程序,重点关注的主要功能领域是:
1.基于阵列的快速操作,用于数据整理和清理、子集和过滤、转换以及任何其他类型的计算
2.常见的数组算法,如排序、唯一和集合操作
3.高效的描述性统计和汇总/汇总数据
4.将条件逻辑表示为数组表达式,而不是带有 `if-elif-else` 分支的循环
5.分组数据操作(聚合、转换和函数应用)
NumPy 为一般数值数据处理提供了计算基础
Pandas 作为大多数统计或分析的基础,尤其是表格数据;还提供了一些更多特定于领域的功能,例如时间序列操作,这在 NumPy 中是不存在的
NumPy 对 Python 中的数值计算如此重要的原因之一是因为它旨在提高对大型数据数组的效率
NumPy 在内部将数据存储在连续的内存块中,独立于其他内置的 Python 对象。NumPy 用 C 语言编写的算法库可以在此内存上运行,而无需任何类型检查或其他开销。NumPy 数组使用的内存也比内置的 Python 序列少得多。
NumPy 操作对整个数组执行复杂的计算,而无需 Python `for` 循环;基于 C 的算法避免了常规解释的 Python 代码的开销。
4.1 NumPy ndarray:多维数组对象
它的 N 维数组对象或 ndarray,它是 Python 中大型数据集的快速、灵活的容器。
`import numpy as np`
遵循这样的标准约定几乎总是一个好主意
命名 `numpy` 空间很大,包含许多函数,其名称与内置 Python 函数(如 `min` 和 `max` )冲突
ndarray
是用于同构数据的通用多维容器;
也就是说,所有元素必须是相同的类型。
每个数组都有一个 `shape` ,一个表示每个维度大小的元组;
以及一个 `dtype` 描述数组数据类型的对象
比如说
(2, 3):二乘三的数组 arr2.shape
dtype('float64') 数据类型都是float64 data.dtype
Creating ndarrays 创建 ndarrays
numpy.array
numpy.zeros 分别 numpy.ones 创建具有给定长度或形状的 0 或 1 数组
numpy.empty 创建一个数组,而不将其值初始化为任何特定值
numpy.arange 是内置 Python range 函数的数组值版本:
np.arange(15)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
ndarrays 的数据类型
数值数据类型的命名方式相同:
类型名称(如 `float` 或 `int` ),后跟一个指示每个元素位数的数字。
一个标准的双精度浮点值(在 Python `float` 对象的后台使用)占用 8 个字节或 64 位。
因此,这种类型在 NumPy 中称为 `float64`
可以使用 **ndarray `astype`** 的方法将数组从一种数据类型显式转换或强制转换为另一种数据类型
将一些浮点数转换为整数数据类型,则小数部分将被截断
如果有一个表示数字的字符串数组,则可以使用 astype 它们转换为数字形式
调用 `astype` 始终会创建一个新数组(数据的副本),即使新数据类型与旧数据类型相同也是如此。
使用 NumPy 数组进行算术
NumPy 用户称之为矢量化。等大小数组之间的任何算术运算都按元素应用运算:
使用标量的算术运算将标量参数传播到数组中的每个元素:
相同大小的数组之间的比较产生布尔数组:
基本索引和切片
NumPy 数组索引是一个很深层次的话题,可能希望通过多种方式选择数据的子集或单个元素。
跟python是一样的
Indexing with slices 使用切片编制索引
与一维对象(如 Python 列表)一样,ndarrays 可以使用熟悉的语法进行切片:
考虑前面的二维数组。 `arr2d` 对这个数组进行切片有点不同:
n [91]: arr2d
Out[91]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [92]: arr2d[:2]
Out[92]:
array([[1, 2, 3],
[4, 5, 6]])
Boolean Indexing 布尔索引
其中我们在数组中有一些数据,并且具有重复的名称数组:
选择具有相应名称,会产生一个布尔数组:
Fancy Indexing 花式索引
花式索引是 NumPy 采用的一个术语,用于描述使用整数数组的索引。
arr[[4, 3, 0, 6]]
#arr[[4, 3, 0, 6]] 表示选择了数组 arr 中索引为 4、3、0 和 6 的行,并将它们作为一个新的数组返回。
arr = np.arange(32).reshape((8, 4))
arr[[1, 5, 7, 2], [0, 3, 1, 2]]
# arr[[1, 5, 7, 2], [0, 3, 1, 2]] 使用两个整数数组作为索引来选择 NumPy 数组中的元素。第一个整数数组 [1, 5, 7, 2] 代表行索引,第二个整数数组 [0, 3, 1, 2] 代表相应行中要选择的列索引。
# 这个操作实际上是一种广播操作,它从每个索引对 (1, 0), (5, 3), (7, 1), (2, 2) 处选择了数组 arr 中的元素。
arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
# arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] 是一个复合索引的操作,用于选择 NumPy 数组中的特定行和列。
# arr[[1, 5, 7, 2]] 选择了索引为 1、5、7 和 2 的行,形成一个子数组。
# [:, [0, 3, 1, 2]] 选择了子数组的所有行,并按照给定的列索引顺序选择列。
转置数组和交换轴
转置是一种特殊的重塑形式,它同样在不复制任何内容的情况下返回底层数据的视图。数组具有 `transpose` 方法和特殊 `T` 属性
4.2 伪随机数生成
该 `numpy.random` 模块补充了内置的 Python `random` 模块,其中包含用于从多种概率分布中有效生成整个样本值数组的函数。例如,您可以使用以下方法 `numpy.random.standard_normal` 从标准正态分布中获取 4 × 4 个样本数组:
`samples = np.random.standard_normal(size=(4, 4))`
例如 `numpy.random.standard_normal` 使用 `numpy.random` 模块的默认随机数生成器,但可以将代码配置为使用显式生成器
rng = np.random.default_rng(seed=12345)
data = rng.standard_normal((2, 3))
#seed 参数决定了生成器的初始状态,每次使用 rng 对象生成数据时,状态都会发生变化。生成器对象 rng 也与可能使用该 numpy.random 模块的其他代码隔离
4.3 通用函数:快速的逐元素数组函数
通用函数 (ufunc) 是对 ndarray 中的数据执行元素级运算的函数。您可以将它们视为简单函数的快速矢量化包装器,这些函数采用一个或多个标量值并生成一个或多个标量结果。
许多 ufunc 都是简单的元素转换,例如 `numpy.sqrt` 或 `numpy.exp` :这些被称为一元 ufuncs
numpy.add 或 numpy.maximum ,采用两个数组(因此,二进制 ufuncs)
np.maximum(x, y)
#numpy.maximum 计算了 和 y 中 x 元素的最大值。
4.4 数组面向数组编程
广播:见代码
数学和统计方法
以通过调用数组实例方法或使用顶级 NumPy 函数来使用聚 `sum` `mean` 合(有时称为约简)等 `std` 聚合(有时称为约简)和(标准差)。