[英]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只是對列表5的引用。 有什么方法可以創建此矩陣,以便修改一個元素不會影響其他元素?
對於稀疏矩陣,它的效率非常低,但是您可以使用:
>>> 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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.