NumPy 中可以定义高级的复合数据类型。例如,可以创建一种类型,其中每个元素都包含一个数组或矩阵。我们会创建一个数据类型,该数据类型用 mat 组件包含一个 3×3的浮点矩阵:
tp = np.dtype([('id', 'i8'), ('mat', 'f8', (3, 3))])
X = np.zeros(1, dtype=tp)
print(X[0])
print(X['mat'][0])
输出结果如下所示:
(0, [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]) [[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.]]
现在 X 数组的每个元素都包含一个 id 和一个 3×3 的矩阵。为什么我们宁愿用这种方法存储数据,也不用简单的多维数组,或者 Python 字典呢?原因是 NumPy 的 dtype 直接映射到 C 结构的定义,因此包含数组内容的缓存可以直接在 C 程序中使用。如果你想写一个Python 接口与一个遗留的 C 语言或 Fortran 库交互,从而操作结构化数据,你将会发现结构化数组非常有用!



