如何定义二维数组?
2022-09-05 01:20:05
我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
索引错误:列表索引超出范围
我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
索引错误:列表索引超出范围
从技术上讲,您正在尝试为未初始化的数组编制索引。在添加项目之前,您必须首先使用列表初始化外部列表;Python称之为“列表理解”。
# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 8, 5
Matrix = [[0 for x in range(w)] for y in range(h)]
#You现在可以向列表中添加项目:
Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range...
Matrix[0][6] = 3 # valid
请注意,矩阵是“y”地址主要,换句话说,“y索引”在“x索引”之前。
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
虽然您可以随意命名它们,但我以这种方式看待它以避免索引可能产生的一些混淆,如果您同时对内部和外部列表使用“x”,并且想要一个非平方矩阵。
如果你真的想要一个矩阵,你最好使用 .矩阵运算通常使用具有两个维度的数组类型。有很多方法可以创建新数组;其中最有用的是函数,它采用 shape 参数并返回给定形状的数组,其值初始化为零:numpy
numpy
zeros
>>> import numpy
>>> numpy.zeros((5, 5))
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
以下是创建 2-d 数组和矩阵的其他一些方法(为了紧凑起见,删除了输出):
numpy.arange(25).reshape((5, 5)) # create a 1-d range and reshape
numpy.array(range(25)).reshape((5, 5)) # pass a Python range and reshape
numpy.array([5] * 25).reshape((5, 5)) # pass a Python list and reshape
numpy.empty((5, 5)) # allocate, but don't initialize
numpy.ones((5, 5)) # initialize with ones
numpy
也提供了一种类型,但不再建议将其用于任何用途,并且将来可能会从中删除。matrix
numpy