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

如何在python中创建非常大的二维矩阵?,python,python-2.7,matrix,multidimensional-array,sparse-matrix,Python,Python 2.7,Matrix,Multidimensional Array,Sparse Matrix,我需要一个具有50000行和50000列的二维矩阵,每个元素的值设置为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次引用。有没有办法创建此矩阵,以便修改一个元素不会影响其他元素

我需要一个具有50000行和50000列的二维矩阵,每个元素的值设置为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次引用。有没有办法创建此矩阵,以便修改一个元素不会影响其他元素?

对于一个元素来说效率很低,但您可以使用:

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

(考虑改用)

这对a来说效率很低,但您可以使用:

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

(考虑改用)

如果要使用
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。

如果要使用
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]]
我的解决方案:

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]]

您不希望在二维数组中存储稀疏矩阵。占用太多内存。你能安装SciPy吗
scipy.sparse
提供了所有标准稀疏矩阵格式的高效实现,比您自己编写的任何格式都要好。@user2357112我安装了scipy。您能告诉我如何使用scipy.sparse创建5000X5000矩阵吗?我可以通过索引更改矩阵的值吗?@Karthik:
scipy.sparse.property_type((50005000))
。您可以将值指定给矩阵的单元格,不过您应该知道哪些稀疏矩阵表示最适合于哪些操作
coo_matrix
适用于增量更新。@user2357112非常感谢。您不想在2d数组中存储稀疏矩阵。占用太多内存。你能安装SciPy吗
scipy.sparse
提供了所有标准稀疏矩阵格式的高效实现,比您自己编写的任何格式都要好。@user2357112我安装了scipy。您能告诉我如何使用scipy.sparse创建5000X5000矩阵吗?我可以通过索引更改矩阵的值吗?@Karthik:
scipy.sparse.property_type((50005000))
。您可以将值指定给矩阵的单元格,不过您应该知道哪些稀疏矩阵表示最适合于哪些操作
coo_matrix
适用于增量更新。@user2357112非常感谢。