簡體   English   中英

如何在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只是對列表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM