如何在 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]]
我需要一个具有 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]]