Python:如何创建大小为n的零索引二维矩阵

时间:2018-10-12 05:07:30

标签: python matrix

给定值n,最有效的方法是创建列索引和行大小等于值n的零索引矩阵?

我知道以下命令将创建一个二维矩阵,其中所有单元格值均为0:

[[0 for x in range(n)] for y in range(n)] 

因此,当n = 4时,矩阵将如下所示:

[[0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0]]

但是有什么方法可以如下创建矩阵?

[[ 0,  1,  2,  3],
 [ 4,  5,  6,  7],
 [ 8,  9, 10, 11],
 [12, 13, 14, 15]]

3 个答案:

答案 0 :(得分:1)

您可以简单地使用当前坐标xy来计算值x + y*n

n = 4
print([[x + y*n for x in range(n)] for y in range(n)])

您可以使用itertools.count

from itertools import count

n = 4
counter = count()
print([[next(counter) for x in range(n)] for y in range(n)])

答案 1 :(得分:1)

由于您在谈论二维矩阵,并且您特别在询问效率,因此最好转向numpy

import numpy as np

n = 4    
my_matrix = np.arange(n*n).reshape(n,n)

>>> my_matrix
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

或者您可以使用以下列表理解(或@hiroprotagonist建议的一种):

n = 4  
my_ListOfLists = [list(range(i,i+n)) for i in range(0,n*n,n)]

>>> my_ListOfLists
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]

答案 2 :(得分:0)

类似的事情会起作用。

[[i for i in range(j, j + 4)] for j in range(0, 20, 4)]

[[0, 1, 2, 3],
 [4, 5, 6, 7],
 [8, 9, 10, 11],
 [12, 13, 14, 15],
 [16, 17, 18, 19]]