HOWTO · Python
如何在 Python 中声明 3D 数组
有 3 种主要方法可用于在 Python 中声明 3D 数组:列表推导式、乘法方法和 numpy 库。
本页内容
Python 中的三维结构可以是嵌套列表或 NumPy 的 ndarray。对独立的 Python 列表使用嵌套列表推导式;仅当共享引用可以接受时才使用列表乘法;数值数组运算则使用 NumPy。
在 Python 中使用列表推导式声明 3D 列表
嵌套列表推导式会构建普通的 Python 列表,在每一层都创建一个新的内层列表。下面的列表推导式语法会创建一个以零填充、形状为 2 × 2 × 2 的结构:两个外层元素,每个元素包含两行、每行两个值。
运行此示例:
n = 2
distance = [[[0 for k in range(n)] for j in range(n)] for i in range(n)]
print(distance)
print((len(distance), len(distance[0]), len(distance[0][0])))
三个嵌套循环对应三个维度。更改 n,或为每个 range 使用不同的大小,即可构建非立方体的形状。
在 Python 中使用乘法方法声明 3D 列表
* 运算符会重复一个列表,但不会递归复制其中的列表。在下面的表达式中,重复的位置引用的是相同的内层列表。因此,更新一个位置可能会改变共享该列表的其他位置:
n = 2
distance = [[[0] * n] * n] * n
distance[0][0][0] = 7
print(distance)
对于独立的嵌套列表,请在每一层使用推导式,例如 [[[0] * n for _ in range(n)] for _ in range(n)]。乘法适用于重复不可变的值,或有意共享引用的情况;对于可变的嵌套数据,它与推导式并不等价。
在 Python 中使用 NumPy 库声明 3D 数组
当您需要 ndarray 以及对其各轴进行数值运算时,请使用 NumPy。它是一个外部库;运行此示例之前,请先在您的项目所使用的 Python 环境中用 pip install numpy 安装。形状元组给出每个轴的大小,np.zeros 会用零填充数组。其默认 dtype 为 float。
try:
import numpy as np
except ImportError:
print("NumPy is not installed in this Python environment.")
else:
new_array = np.zeros((2, 2, 2))
print(new_array.shape)
print(new_array.dtype)
NumPy 数组的显示值格式与嵌套列表不同,但维度与零初始化都是由传给 np.zeros 的形状决定的。若要整数零,请传入 dtype=int,例如 np.zeros((2, 2, 2), dtype=int)。详情请参阅 NumPy 概述和 np.zeros 参考。