在Python 3中有效地初始化大小为n * m的2D数组?

时间:2017-07-30 22:30:18

标签: python arrays python-3.x

我正在使用Python 3,并且我正在尝试创建已知且固定大小的2D整数数组。我怎么能这样做?

我想到的数组是Python提供的array.array,尽管我并不反对使用像NumPy这样的库。

我知道这可以通过列表完成,但我想使用数组,因为它们更节省空间。现在,我正在以这种方式初始化列表,但我想用数组替换它:

my_list = [[ 0 for _ in range(height) ] for _ in range(.width)]

例如,在C中,我会写

int my_array[ width ][ height ];

我如何在Python中执行此操作

2 个答案:

答案 0 :(得分:3)

你可以使用numpy:

import numpy as np
my_array = np.zeros([height, width])

例如:

>>> np.zeros([3, 5])
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

请注意,如果您特别需要整数,则应使用dtype参数

>>> np.zeros([3, 5], dtype=int)
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])

答案 1 :(得分:0)

您发布的代码的等价物是:

import numpy as np
my_array = np.empty([height, width])

empty保留未初始化的空间,因此它比zeros略快,因为zeros必须确保所有内容最初都设置为0。

请注意,与C / C ++一样,您应该在读取之前编写值,因为它们最初“包含垃圾”。

文档:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.empty.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html