我目前正在嘗試做一個非常大的矩陣,我不確定如何以內存有效的方式做到這一點。內存高效的方法來使大零矩陣python
我正在嘗試使用numpy,它適用於我的小案例(2750086X300) 但是,我得到了一個較大的2750086X1000,這對我來說太大了,無法運行。
我雖然關於如何使用ints,但我會添加float值,因此不確定cld如何影響它。
我試圖找到一些關於做一個稀疏的零填充數組,但cldnt在這裏或其他地方找到任何偉大的主題/問題/建議。
任何人有任何好建議?我目前正在使用python,所以我尋找pythonic解決方案,但我願意嘗試其他語言。
THX
編輯:
THX的建議,我已經試過scipy.sparse.csr_matrix它成功地創建一個矩陣,但深深增加了時間去通過它。
繼承人樣的我在做什麼:
matrix = scipy.sparse.csr_matrix((df.shape[0], 300))
## matrix = np.zeros((df.shape[0],
for i, q in enumerate(df['column'].values):
matrix[i, :] = function(q)
其中功能是相當多的該行向量運算功能。
現在,如果我在np.zeros上執行循環,那麼它非常容易,大約需要10分鐘。
現在,如果我嘗試做與scipy稀疏矩陣相同,它需要大約50個小時。這是不合理的。
任何建議?
編輯2:
scipy.sparse.lil_matrix的伎倆
約需20 minut的環路,並使用比np.zeros
THX的存儲方式少。
編輯3:
還是內存昂貴。決定不在矩陣中存儲數據。一次處理1行。從中獲得相關的價值/指標,將價值存儲在原始df中,再次運行。
'np.zeros((2750086,1000))'很可能對您的記憶來說太大了,無論是填滿了零還是實數。有一個稀疏矩陣,說只有0.1%的非零可能適合。但是你對這個數組做什麼?按元素填充它將永遠佔用。而任何數組幾乎填滿內存的數學只會產生一些內存錯誤,因爲它會創建臨時緩衝區。 – hpaulj
想一想,使用32位數字至少需要'2750086 * 1000 * 1e-9 * 4 = 11.000344千兆字節。不是完全瘋狂,但相當大。您可以獲得更多RAM或嘗試使用稀疏表示。 –
在'[scipy]稀疏'上搜索以查找有關'[scipy]'中稀疏矩陣包的問題。 'lil','coo'和'csr'也可以作爲唯一的字符串。如果你正在學習或測試處理軟件包,比如'scikit-learn',可能會有用。 – hpaulj