我想定义一个没有初始化长度的二维数组,如下所示:

Matrix = [][]

但这给出了一个错误:

IndexError:列表索引超出范围


当前回答

通常,go to模块是NumPy:

import numpy as np
   
# Generate a random matrix of floats
np.random.rand(cols,rows)

# Generate a random matrix of integers
np.random.randint(1, 10, size=(cols,rows))

其他回答

要声明一个零(1)矩阵:

numpy.zeros((x, y))

e.g.

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

或numpy.ones((x,y))例如

>>> np.ones((3, 5))
array([[ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.]])

甚至三维都是可能的。(http://www.astro.ufl.edu/~warner/prog/python.html请参见-->多维数组)

如果您希望能够将其视为2D阵列,而不是被迫根据列表进行思考(在我看来更自然),可以执行以下操作:

import numpy
Nx=3; Ny=4
my2Dlist= numpy.zeros((Nx,Ny)).tolist()

结果是一个列表(不是NumPy数组),您可以用数字、字符串等覆盖各个位置。

可以通过将两个或多个方括号或第三个方括号([],用逗号分隔)与方括号嵌套来创建一个空的二维列表,如下所示:

Matrix = [[], []]

现在假设您想将1附加到矩阵[0][0],然后键入:

Matrix[0].append(1)

现在,键入矩阵并按Enter键。输出将为:

[[1], []]

如果您输入以下语句

Matrix[1].append(1)

那么矩阵将是

[[], [1]]
l=[[0]*(L) for _ in range(W)]

将快于:

l = [[0 for x in range(L)] for y in range(W)] 

使用NumPy,可以如下初始化空矩阵:

import numpy as np
mm = np.matrix([])

然后像这样附加数据:

mm = np.append(mm, [[1,2]], axis=1)