如何在 Python 中创建二维数组

您所在的位置:网站首页 python新建二维列表 如何在 Python 中创建二维数组

如何在 Python 中创建二维数组

2022-11-18 09:35| 来源: 网络整理| 查看: 265

列表推导式 嵌套 range 方法 NumPy 方法

本教程将介绍在 Python 中创建二维数组的不同方法。3x5 在以下示例中,我们将创建一个二维数组。

列表推导式 >>> column, row = 3, 5 >>> array2D = [[0 for _ in range(row)] for _ in range(column)] >>> array2D [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

此嵌套列表推导式创建初始值为 0 的二维数组。当然,你可以将初始值更改为需要在应用程序中分配的任何值。

嵌套 range 方法

如果你不关心二维数组中的初始值,甚至可以省略 0 值。

在 Python 2.x 中

>>> column, row = 3, 5 >>> A = [range(row) for _ in range(column)] >>> A [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

在 Python 3.x 中

>>> column, row = 3, 5 >>> A = [range(row) for _ in range(column)] >>> A [range(0, 5), range(0, 5), range(0, 5)]

我们不能简单地在 Python 3.x 中使用 range(x) 初始化 2-D 数组,因为在 Python 3.x 中 range 返回的对象包含整数序列,而不是像在 Python 2.x 中返回的整数列表。

range 在 Python 3.x中更类似于 Python2.x 中的 xrange。Python 3.x 中的 range 类型数据是不可变的,因此,你不能为分配元素。

如果需要元素分配,则需要将转换 range 为 list 对象。

>>> A = [list(range(row)) for _ in range(column)] >>> A [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] [0] * N 方法

创建 2-D 数组的一种 Pythonic 方法可以为,

>>> column, row = 3, 5 >>> A = [[0]*row for _ in range(column)] >>> A [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

尽管我们在使用列表乘法时要谨慎,因为它只会创建一个多次引用同一对象的序列,但 [0]*n 由于数据对象 0 是不可变的,因此我们放心使用此处,即使引用相同的不可变的数据也不会遇到问题。

NumPy 方法

除了原生 Python 数组之外,NumPy 应该是创建二维数组或更准确地说是矩阵的最佳选择。

你可以使用创建一个零填充的矩阵 numpy.zeros。

>>> import numpy as np >>> column, row = 3, 5 >>> np.zeros(column, row) array([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]])

或者用 numpy.ones 创建一个填充 ones 的矩阵。

>>> import numpy as np >>> column, row = 3, 5 >>> np.ones((column, row)) array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]])

你甚至可以用 numpy.empty 创建一个新数组,而无需命令初始化元素。

>>> import numpy as np >>> column, row = 3, 5 >>> np.empty((5,5)) array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306, 1.33511562e-306, 1.89146896e-307], [7.56571288e-307, 3.11525958e-307, 1.24610723e-306, 1.37962320e-306, 1.29060871e-306], [2.22518251e-306, 1.33511969e-306, 1.78022342e-306, 1.05700345e-307, 1.11261027e-306], [1.11261502e-306, 1.42410839e-306, 7.56597770e-307, 6.23059726e-307, 1.42419530e-306], [7.56599128e-307, 1.78022206e-306, 8.34451503e-308, 2.22507386e-306, 7.20705877e+159]]) Notes

先创建空数组,然后再分配元素值,这是一个不错的习惯。但是请注意,随机值位于数组中,因此如果在分配了对应索引位置的值之前通过索引访问数组,则可能会有风险,读到了你没有意想之外的值。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3