返回

NumPy基础:结构化数组深潜

闲谈

结构化数组的遍历

使用NumPy数组中的iterrows()函数,可以访问结构化数组中的每一行,在每次迭代中返回一个记录数组对象,该对象具有可以按属性访问的字段。

import numpy as np

# 创建一个结构化数组
data = np.array([('Alice', 20, 100.0), ('Bob', 25, 90.0), ('Carol', 30, 80.0)],
               dtype=[('name', 'U10'), ('age', 'i4'), ('score', 'f8')])

# 使用iterrows()函数遍历数组
for row in data.iterrows():
    # 通过属性访问字段
    print(f"Name: {row['name']}, Age: {row['age']}, Score: {row['score']}")

# 输出:
# Name: Alice, Age: 20, Score: 100.0
# Name: Bob, Age: 25, Score: 90.0
# Name: Carol, Age: 30, Score: 80.0

结构化数组的子集选择

使用NumPy数组中的[]操作符,可以按字段值选择结构化数组中的行。

# 选择年龄大于25岁的行
data[data['age'] > 25]

# 输出:
# [(('Bob', 25, 90.0),)
#  (('Carol', 30, 80.0),)]

结构化数组的字段操作

NumPy提供了各种函数来对结构化数组的字段进行操作,例如sum(), mean(), max()min()

# 计算每列的总和
print(data.sum(axis=0))

# 输出:
# (('AliceBobCarol', 'U10'), (75, 'i4'), (270.0, 'f8'))

# 计算每列的平均值
print(data.mean(axis=0))

# 输出:
# (('AliceBobCarol', 'U10'), (25.0, 'i4'), (90.0, 'f8'))

# 计算每列的最大值
print(data.max(axis=0))

# 输出:
# (('Carol', 'U10'), (30, 'i4'), (100.0, 'f8'))

# 计算每列的最小值
print(data.min(axis=0))

# 输出:
# (('Alice', 'U10'), (20, 'i4'), (80.0, 'f8'))

小结

结构化数组是NumPy中一种强大的数据结构,它允许按属性而不是仅按索引访问字段。这使得数据访问和操作更加方便。本文介绍了如何遍历结构化数组、选择子集、以及对字段进行操作。