NumPy 怎么创建结构化数组?

文章导读
Previous Quiz Next 结构化数组简介 NumPy 中的结构化数组允许在单个数组中表示不同类型和大小的数据。结构化数组中的每个元素可以是一个具有多个字段的记录,每个字段都有自己的数据类型。
📋 目录
  1. 结构化数组简介
  2. 定义结构化数组
  3. 创建结构化数组
  4. 使用不同数据类型创建结构化数组
  5. 使用元组列表创建结构化数组
  6. 使用字典创建结构化数组
A A

NumPy - 创建结构化数组



Previous
Quiz
Next

结构化数组简介

NumPy 中的结构化数组允许在单个数组中表示不同类型和大小的数据。结构化数组中的每个元素可以是一个具有多个字段的记录,每个字段都有自己的数据类型。

这类似于一个表格,其中每行代表一个具有各种属性的记录。关键点如下 −

  • 结构化数组中的每个元素(记录)可以具有多个字段。
  • 字段可以具有不同的数据类型(例如,整数、浮点数、字符串)。
  • 结构化数组适用于表示复杂的数据结构。

定义结构化数组

创建结构化数组的第一步是定义结构化数组的数据类型。这使用 NumPy 的 dtype 对象完成,该对象指定数组中字段的名称和类型,如以下示例所示 −

import numpy as np

# 定义结构化数组的数据类型
dtype = np.dtype([('name', 'U10'), ('age', 'i4'), ('height', 'f4')])

这里,dtype 是一个具有三个字段的结构化数据类型 −

  • name: 最多 10 个字符的字符串 ('U10')
  • age: 整数 ('i4')
  • height: 浮点数 ('f4')

创建结构化数组

定义好 "dtype" 后,您可以通过将 dtype 传递给 np.array() 函数来创建结构化数组。以下是语法 −

numpy.array(
   object, 
   dtype=None, 
   copy=True, 
   order='K', 
   subok=False, 
   ndmin=0
)

其中,

  • object: 这是您想要转换为 NumPy 数组的输入数据。它可以是列表、元组或任何其他类似序列的结构。
  • dtype (可选): 指定数组的期望数据类型。如果未提供,NumPy 将从输入数据中推断数据类型。例如,可以使用 'int32'、'float64'、'str' 等。
  • copy (可选): 如果为 True(默认),则创建一个新数组。如果为 False,则仅在必要时创建新数组(即,如果输入对象不是数组)。如果为 False,np.array 可能会返回原始数组的视图(如果可能)。
  • order (可选): 指定内存布局顺序。可以是 'C' 表示行优先(C 风格)顺序,'F' 表示列优先(Fortran 风格)顺序,或 'K' 表示输入中发现的顺序。默认为 'K'。
  • subok (可选): 如果为 True,则如果输入是子类,将使用 ndarray 的子类。默认为 False,表示返回的数组始终是 ndarray 的实例。
  • ndmin (可选): 指定结果数组应具有的最小维度数。例如,设置 ndmin=2 可确保结果至少是一个二维数组。

示例

在以下示例中,我们定义了一个带有指定 dtype 的结构化数组,该 dtype 包含 "name"、"age" 和 "height" 字段。然后,我们使用与此结构匹配的数据创建数组,并打印结果结构化数组 −

import numpy as np

# 定义带有字段名称和数据类型的 dtype
dtype = [('name', 'U10'), ('age', 'i4'), ('height', 'f4')]

# 创建与 dtype 一致的数据
data = [('Alice', 30, 5.6), ('Bob', 25, 5.8), ('Charlie', 35, 5.9)]

# 创建结构化数组
structured_array = np.array(data, dtype=dtype)
print("Structured Array:\n", structured_array)

以下是获得的结果 −

Structured Array:
[('Alice', 30, 5.6) ('Bob', 25, 5.8) ('Charlie', 35, 5.9)]

使用不同数据类型创建结构化数组

你可以根据应用程序的需求创建包含各种数据类型的结构化数组,包括字符串、整数和浮点数。

在结构化数组的上下文中 −

  • Strings: 你可以在结构化数组中存储文本数据。例如,姓名字段可能使用 string 数据类型。
  • Integers: 数值数据,如年龄或计数,可以存储为整数。这可能包括像年龄或数量这样的整数数据。
  • Floats: 对于小数或实数,你可以使用 float 数据类型。这对于测量值或需要精度的任何值(如身高或体重)非常有用。

示例

在以下示例中,我们创建了一个结构化数组,其数据类型 (dtype) 包含混合数据类型:ID 使用整数,姓名使用字符串,分数使用浮点数 −

import numpy as np

# 定义包含混合数据类型的 dtype
dtype = [('id', 'i4'), ('name', 'U15'), ('score', 'f8')]
data = [(1, 'Alice', 88.5), (2, 'Bob', 91.2), (3, 'Charlie', 85.4)]

# 创建结构化数组
structured_array = np.array(data, dtype=dtype)
print("Structured Array with Mixed Data Types:\n", structured_array)

这将产生以下结果 −

Structured Array with Mixed Data Types:[(1, 'Alice', 88.5) (2, 'Bob', 91.2) (3, 'Charlie', 85.4)]

使用元组列表创建结构化数组

你可以使用元组列表来定义 dtype 并创建结构化数组,其中每个元组表示一个字段。每个元组包含两个元素:第一个元素是字段名称,第二个元素是该字段的数据类型。

示例

在以下示例中,我们使用指定的 dtype 定义了一个包含 "name"、"age" 和 "height" 字段的结构化数组。然后使用相应的数据创建该数组 −

import numpy as np

# 定义 dtype
dtype = [('name', 'U10'), ('age', 'i4'), ('height', 'f4')]

# 定义数据
data = [('Alice', 30, 5.6), ('Bob', 25, 5.8), ('Charlie', 35, 5.9)]

# 创建结构化数组
structured_array = np.array(data, dtype=dtype)

print("Structured Array:\n", structured_array)

以下是获得的结果 −

Structured Array:
[('Alice', 30, 5.6) ('Bob', 25, 5.8) ('Charlie', 35, 5.9)]

使用字典创建结构化数组

或者,你可以使用字典来定义数据和 dtype,以清晰地指定字段的名称和类型。字典中的每个键表示一个字段名称,与每个键关联的值定义了该字段的数据类型。

示例

在这个示例中,我们使用字典格式定义结构化数组的 dtype,以指定 "name"、"age" 和 "height" 字段。然后创建并显示这个结构化数组及其相应数据,将其组织成支持每个记录中多种数据类型的格式 −

import numpy as np

# 使用字典定义 dtype
dtype = np.dtype([('name', 'U10'), ('age', 'i4'), ('height', 'f4')])

# 定义数据
data = [('Alice', 30, 5.6), ('Bob', 25, 5.8), ('Charlie', 35, 5.9)]

# 创建结构化数组
structured_array = np.array(data, dtype=dtype)

print("Structured Array from Dictionary:\n", structured_array)

这将产生以下结果 −

Structured Array from Dictionary:
[('Alice', 30, 5.6) ('Bob', 25, 5.8) ('Charlie', 35, 5.9)]