如何在 python 中创建一个非常大的二维矩阵?

How to create a very large 2 dimensional matrix in python?

我需要一个具有 50,000 行和 50,000 列的二维矩阵,每个元素都设置为值 0,同时易于记忆。

我试过这个:

value = 5
a = [0] * value
b = [a] * value
b[2][3] = 5
print b

这给了我

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

我知道列表b只是对列表a的5次引用。有什么方法可以创建此矩阵,以便修改一个元素不会影响其他元素?

sparse matrix 效率很低,但您可以使用:

>>> mat = [[0 for x in range(2)] for x in range(3)]
>>> mat
[[0, 0], [0, 0], [0, 0]]

(考虑改用 scipy.sparse

如果你想使用 numpy 有一个内置方法:

>>> np.zeros((10,10))
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.,  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.],
       [ 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.,  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.]])

如果没有,你可以使用列表理解,虽然它会很慢。

[[0 for r in range(10)] for c in range(10)] 

请注意,有更有效的方法来存储稀疏矩阵,例如使用 scipy。

我的解决方案:

value = 5
b = [[0 for x in range(value)] for y in range(value)]
b[2][3] = 5
print( b)

结果:

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