# 结构化数组 假设我们要保存这样的数据: | | name | age | wgt | | --- | --- | --- | --- | | 0 | dan | 1 | 23.1 | | 1 | ann | 0 | 25.1 | | 2 | sam | 2 | 8.3 | 希望定义一个一维数组,每个元素有三个属性 `name, age, wgt`,此时我们需要使用结构化数组。 In [1]: ```py import numpy as np ``` 定义数组 `a`: | 0 | 1 | 2 | 3 | | --- | --- | --- | --- | | 1.0 | 2.0 | 3.0 | 4.0 | In [2]: ```py a = np.array([1.0,2.0,3.0,4.0], np.float32) ``` 使用 `view` 方法,将 `a` 对应的内存按照复数来解释: In [3]: ```py a.view(np.complex64) ``` Out[3]: ```py array([ 1.+2.j, 3.+4.j], dtype=complex64) ``` | 0 | 1 | 2 | 3 | | --- | --- | --- | --- | | 1.0 | 2.0 | 3.0 | 4.0 | | real | imag | real | imag | 事实上,我们可以把复数看成一个结构体,第一部分是实部,第二部分是虚部,这样这个数组便可以看成是一个结构化数组。 换句话说,我们只需要换种方式解释这段内存,便可以得到结构化数组的效果! | 0 | 1 | 2 | 3 | | --- | --- | --- | --- | | 1.0 | 2.0 | 3.0 | 4.0 | | mass | vol | mass | vol | 例如,我们可以将第一个浮点数解释为质量,第二个浮点数解释为速度,则这段内存还可以看成是包含两个域(质量和速度)的结构体。 In [4]: ```py my_dtype = np.dtype([('mass', 'float32'), ('vol', 'float32')]) ``` In [5]: ```py a.view(my_dtype) ``` Out[5]: ```py array([(1.0, 2.0), (3.0, 4.0)], dtype=[('mass', '