3.1 从 Python 列表和元组创建 NumPy ndarray 创建:从 Python 列表和元组入手 NumPy 是 Python 中用于科学计算的核心库。它的主要对象是同构多维数组 ,它是一个功能强大的数据结构,为高效的数值计算提供了基础。创建 的方法有很多,其中最直接的方法之一就是使用 Python 的列表和元组。本章将深入探讨如何使用列表和元组创建 ,并详细解释相关概念和实践。 3.1 从 Python 列表和元组创建 ndarray 3.1.1 基本概念 函数是 NumPy 中创建 的主要工具。它可以接受各种类型的输入,包括 Python 列表、元组、数组以及其他序列类型。当输入是列表或元组时, 函数会尝试将它们转换为一个 。
NumPy 是 Python 中用于科学计算的核心库。它的主要对象是同构多维数组 ndarray,它是一个功能强大的数据结构,为高效的数值计算提供了基础。创建 ndarray 的方法有很多,其中最直接的方法之一就是使用 Python 的列表和元组。本章将深入探讨如何使用列表和元组创建 ndarray,并详细解释相关概念和实践。
numpy.array() 函数是 NumPy 中创建 ndarray 的主要工具。它可以接受各种类型的输入,包括 Python 列表、元组、数组以及其他序列类型。当输入是列表或元组时,array() 函数会尝试将它们转换为一个 ndarray。
语法:
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
object: 必需参数,表示要转换为数组的对象,可以是列表、元组或已有的数组。
dtype: 可选参数,指定数组的数据类型。如果未指定,NumPy 会尝试自动推断数据类型。
copy: 可选参数,默认为 True,表示是否复制对象。如果为 False,并且输入对象是 ndarray,则返回原始数组的视图,而不是复制。
order: 可选参数,指定数组的存储顺序,可以是 'C'(行优先)或 'F'(列优先)。
subok: 可选参数,如果为 True,则子类将被传递,否则返回的数组将被强制为基类数组。
ndmin: 可选参数,指定结果数组的最小维数。
从列表创建 ndarray 是最常见的用法之一。列表可以是一维的,也可以是多维的,NumPy 会根据列表的结构自动推断数组的形状。
示例 1:一维数组
import numpy as np # 从一维列表创建数组 list1 = [1, 2, 3, 4, 5] arr1 = np.array(list1) print(arr1) print(type(arr1)) print(arr1.shape) print(arr1.dtype)
输出:
[1 2 3 4 5] <class 'numpy.ndarray'> (5,) int64
解释:
np.array(list1) 将 Python 列表 list1 转换为 NumPy 数组 arr1。
type(arr1) 显示 arr1 的类型为 numpy.ndarray。
arr1.shape 显示数组的形状为 (5,),表示一个包含 5 个元素的一维数组。
arr1.dtype 显示数组的数据类型为 int64,这是 NumPy 自动推断的整数类型。
示例 2:二维数组
import numpy as np # 从二维列表创建数组 list2 = [[1, 2, 3], [4, 5, 6]] arr2 = np.array(list2) print(arr2) print(arr2.shape) print(arr2.dtype)
输出:
[[1 2 3] [4 5 6]] (2, 3) int64
解释:
np.array(list2) 将二维列表 list2 转换为 NumPy 数组 arr2。
arr2.shape 显示数组的形状为 (2, 3),表示一个 2 行 3 列的二维数组。
示例 3:指定数据类型
import numpy as np # 指定数据类型为 float32 list3 = [1, 2, 3, 4, 5] arr3 = np.array(list3, dtype=np.float32) print(arr3) print(arr3.dtype)
输出:
[1. 2. 3. 4. 5.] float32
解释:
dtype=np.float32 强制将数组的数据类型设置为 32 位浮点数。与列表类似,也可以使用元组创建 ndarray。元组也可以是一维或多维的。
示例 1:一维数组
import numpy as np # 从一维元组创建数组 tuple1 = (1, 2, 3, 4, 5) arr4 = np.array(tuple1) print(arr4) print(arr4.shape) print(arr4.dtype)
输出:
[1 2 3 4 5] (5,) int64
示例 2:二维数组
import numpy as np # 从二维元组创建数组 tuple2 = ((1, 2, 3), (4, 5, 6)) arr5 = np.array(tuple2) print(arr5) print(arr5.shape) print(arr5.dtype)
输出:
[[1 2 3] [4 5 6]] (2, 3) int64
示例 3:混合使用列表和元组
import numpy as np # 混合使用列表和元组 mixed = [(1, 2, 3), [4, 5, 6]] arr6 = np.array(mixed) print(arr6) print(arr6.shape) print(arr6.dtype)
输出:
[[1 2 3] [4 5 6]] (2, 3) int64
解释:
如果列表或元组的结构不规则(例如,子列表的长度不一致),NumPy 会尝试创建一个对象数组,其中每个元素都是一个 Python 对象。
示例:
import numpy as np # 不规则的列表 irregular_list = [[1, 2], [3, 4, 5]] arr7 = np.array(irregular_list) print(arr7) print(arr7.shape) print(arr7.dtype)
输出:
[list([1, 2]) list([3, 4, 5])] (2,) object
解释:
由于 irregular_list 的子列表长度不一致,NumPy 创建了一个形状为 (2,) 的对象数组,其中每个元素都是一个列表。
dtype 为 object,表示数组存储的是 Python 对象。
copy 参数copy 参数控制是否复制输入对象。当 copy=False 且输入对象是 ndarray 时,返回的是原始数组的视图,而不是复制。
示例:
import numpy as np # 创建一个数组 arr8 = np.array([1, 2, 3, 4, 5]) # 创建 arr8 的视图 arr9 = np.array(arr8, copy=False) # 修改 arr8 arr8[0] = 100 print(arr8) print(arr9)
输出:
[100 2 3 4 5] [100 2 3 4 5]
解释:
arr9 是 arr8 的视图,修改 arr8 会影响 arr9。ndmin 参数ndmin 参数指定结果数组的最小维数。如果输入对象的维数小于 ndmin,则会在前面添加维度。
示例:
import numpy as np # 指定最小维数为 2 list4 = [1, 2, 3, 4, 5] arr10 = np.array(list4, ndmin=2) print(arr10) print(arr10.shape)
输出:
[[1 2 3 4 5]] (1, 5)
解释:
ndmin=2 确保数组至少是二维的。由于 list4 是一维的,NumPy 在前面添加了一个维度,使其形状变为 (1, 5)。import numpy as np # 从列表创建 list_data = [1, 2, 3] array_from_list = np.array(list_data) # 从元组创建 tuple_data = (4, 5, 6) array_from_tuple = np.array(tuple_data) # 指定数据类型 array_float = np.array([1, 2, 3], dtype=np.float32) # 多维数组 multi_dim_list = [[1, 2], [3, 4]] array_multi_dim = np.array(multi_dim_list) print("Array from list:", array_from_list) print("Array from tuple:", array_from_tuple) print("Array with float type:", array_float) print("Multi-dimensional array:\n", array_multi_dim)
以下是一个使用 Mermaid 绘制的流程图,展示了从 Python 列表或元组创建 ndarray 的过程:
解释:
A: 开始
B: 输入 Python 列表或元组
C: 调用 numpy.array() 函数
D: 检查是否指定了数据类型 (dtype)
E: 使用指定的数据类型创建 ndarray
F: 自动推断数据类型
G: 创建 ndarray
H: 返回 ndarray
I: 结束
使用 Python 列表和元组创建 NumPy 数组是一种简单而强大的方法。通过 numpy.array() 函数,可以轻松地将 Python 序列转换为高效的 NumPy 数组,并利用 NumPy 提供的各种功能进行数值计算。理解 dtype、copy 和 ndmin 等参数可以帮助你更好地控制数组的创建过程,从而满足不同的需求。