
441
附录 A
高阶 NumPy
在附录
A
中,我会深入讲解
NumPy
库的数组计算,包括关于
ndarray
类型以及更高级的
数组操作和算法的更多内部细节。
该部分包括多个主题,读者不必按顺序阅读。在附录
A
中,我使用 numpy.random 模块
中默认的随机数生成器为许多示例生成了随机数据,如下所示:
A.1 ndarray
对象的内部机理
NumPy
的
ndarray
提供了一种将同构类型数据块(可以是连续的或步进的)解释为多维
数组对象的方式。数据类型(
dtype
)决定了数据的解释方式,比如浮点数、整数、布尔
值等类型。
ndarray
如此强大,部分原因是所有数组对象都是数据块的步进视图。例如,你可能想知
道数组视图 arr[::2,::-1] 不复制任何数据的原因是什么。简单地说,
ndarray
不只是
一块内存和一个
dtype
,它还有步进信息,这使得数组能以各种步幅在内存中移动。更
准确地讲,
ndarray
内部由以下内容组成:
·
指向数据的指针,数据指内存或内存映射文件中的一块数据。
·
数据类型(dtype),用于描述数组中固定大小的值单元格。
·
表示数组形状的元组。
·
步进元组,其中的整数是指为了前进到当前维度的下一个元素,需要“步进”的字
节数。
图
A-1
简单模拟了
ndarray
的内部结构。