我需要一个包含50,000行和50,000列的二维矩阵,每个元素设置为0,同时在内存上很容易。
我试过了:
$unencodedData = "{$string}/{$timestamp}/{$rand}";
哪个给了我
value = 5
a = [0] * value
b = [a] * value
b[2][3] = 5
print b
我知道列表b只是列出5次的引用。有没有办法创建这个矩阵,以便修改一个元素不会影响其他元素?
答案 0 :(得分:1)
>>> mat = [[0 for x in range(2)] for x in range(3)]
>>> mat
[[0, 0], [0, 0], [0, 0]]
(考虑改为使用sparse matrix)
答案 1 :(得分:1)
如果您想使用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。
答案 2 :(得分: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]]