📜  Python:Numpy 的结构化数组(1)

📅  最后修改于: 2023-12-03 15:34:32.782000             🧑  作者: Mango

Python: Numpy 的结构化数组

Numpy 的结构化数组是一种特殊的数组类型,其中每个元素的数据类型可以由用户进行自定义。这使得结构化数组可以表示复合数据类型,例如表格或数据库中的行。

创建结构化数组

可以通过 numpy.array() 函数和描述每个元素的元组来创建结构化数组。以下示例演示如何创建一个结构化数组,称为 student,其中包含每个学生的姓名、年龄和成绩。

import numpy as np

# 定义结构化数组的数据类型
dt = np.dtype([('name', 'S10'), ('age', int), ('score', float)])

# 创建结构化数组
student = np.array([('Alice', 19, 95.5), ('Bob', 20, 87.5), ('Charlie', 18, 90.3)], dtype=dt)

print(student)

输出:

[(b'Alice', 19, 95.5) (b'Bob', 20, 87.5) (b'Charlie', 18, 90.3)]

在此示例中,dt 是一个元组,其中每个元素也是一个元组,每个元组表示一个字段的名称和类型。在此示例中,name 字段的类型为字符串长度为 10,age 字段的类型为整数,score 字段的类型为浮点数。

然后,可以使用 numpy.array() 函数将包含每个学生数据的元组列表转换为结构化数组。请注意,必须使用参数 dtype 指定数据类型。

访问结构化数组元素

可以使用类似于访问字典中的元素或访问属性的方式访问结构化数组中的元素。例如,要访问第一个学生的成绩,请执行以下操作:

print(student[0]['score'])

输出:

95.5

请注意,结构化数组中的元素将返回一个元组,该元组的每个元素都是对应字段的值。

用条件筛选结构化数组元素

可以使用类似于布尔掩码的方式对结构化数组中的元素进行条件筛选。以下示例演示如何筛选分数大于 90 分的学生。

mask = student['score'] > 90
print(student[mask])

输出:

[(b'Alice', 19, 95.5) (b'Charlie', 18, 90.3)]

在此示例中,mask 是一个布尔数组,表示分数大于 90 分的元素。使用此掩码作为索引将返回符合条件的学生。

总结

Numpy 的结构化数组是一种特殊的数组类型,每个元素的数据类型可以由用户进行自定义。这使得结构化数组可以表示复合数据类型,例如表格或数据库中的行。可以使用常规的数组操作访问结构化数组中的元素,并使用类似于布尔掩码的方式对元素进行条件筛选。