我有一個巨大的csv文件,無法加載到內存中。將其轉換爲libsvm格式可能會節省一些內存。 在csv文件中有許多南。如果我讀取行並將它們存儲爲np.array,並將np.nan作爲NULL,那麼數組是否仍佔用太多內存? 數組中的np.nan是否也佔用內存?numpy數組中的np.nan是否佔用內存?
回答
據我所知是的,南與零個值佔用相同的內存爲任何其他值,但是,可以通過其他方式解決你的問題:
您是否嘗試過使用稀疏向量?它們用於向量有很多0值和內存佔用優化
有你有關於SVM和稀疏矩陣一些信息,如果您還有其他問題,只問。
編輯,以提供一個答案,以及一個溶液
根據來自sys模塊它的getsizeof()命令。一個簡單而快速的例子:
import sys
import numpy as np
x = np.array([1,2,3])
y = np.array([1,np.nan,3])
x_size = sys.getsizeof(x)
y_size = sys.getsizeof(y)
print(x_size)
print(y_size)
print(y_size == x_size)
這應該打印出來
120
120
True
所以我的結論是,它使用的內存爲常規條目。
相反,您可以使用稀疏矩陣(Scipy.sparse),它根本不保存零/空值,因此具有更高的內存效率。但是Scipy強烈不鼓勵直接使用Numpy方法https://docs.scipy.org/doc/scipy/reference/sparse.html,因爲Numpy可能無法正確解釋它們。
在我的機器上,這會打印'108,120,False',因爲'x。dtype == np.int32'。爲了使其成爲一個有用的例子,你應該使用'1.0,2.0,3.0',這將使得數組具有相同的類型 – Eric
好吧,對不起。我不知道這個例子中的機器可能有區別。但是爲了在我的機器上公平,它就是這樣工作的。此外'x.dtype == np.int64'和類似於'y == np.float64'的數據類型在我的情況下 –
當使用floating point表示的數字時,非數字值(NaN
和inf
)也由佔用與任何數字浮點值相同位數的特定二進制模式表示。因此,NaN
與陣列中的其他數字佔用相同的內存量。
- 1. Numpy數組佔用太多內存
- 2. 將np.nan轉換爲numpy數組中的值
- 3. 引用是否可以佔用內存?
- 4. 是否無效佔用內存在MySQL
- 5. 超時是否佔用內存?
- 6. pkt_data是否連續佔用內存?
- 7. numpy數組內存分配
- 8. numpy數組的Python內存使用
- 9. Numpy:減少隨機數據點積的內存佔用
- 10. 沒有數據的類的對象是否佔用內存?
- 11. 是否創建函數佔用更多的內存
- 12. 什麼是內存佔用?
- 13. PHP中的布爾值是否只佔用1位內存?
- 14. 在C++中,矢量是否佔用連續的內存插槽?
- 15. 空值是否佔用BQ表中的任何內存
- 16. JAR文件中的資源是否會佔用手機內存?
- 17. 引用是否在C++中佔用內存?
- 18. 在numpy數組內搜索numpy數組
- 19. 內存中numpy跨步數組/廣播數組的大小?
- 20. 內存佔用
- 21. f如何釋放Java中數組佔用的內存
- 22. C++扁平數組與多維數組內存佔用
- 23. Hadoop的複製是否會佔用NameNode的內存
- 24. DLR的內存佔用量是多少?
- 25. 什麼是圍棋的內存佔用
- 26. 具有空setter的屬性是否佔用內存空間?
- 27. CLR是否佔用連續的內存塊?
- 28. clipsToBounds = YES是否減少我的內存佔用?
- 29. 檢查數組中的元素是否已被佔用
- 30. 我是否需要釋放C#中數組使用的內存?
*數組中的np.nan是否也佔用內存?* numpy數組是一種同類固定大小的記錄數據結構,即爲每個元素分配相同數量的內存(例如, float32「和8個字節)。 'numpy.nan'僅由一個特殊(保留)位模式表示。 – Leon
Numpy數組是連續的(假設C排序並且沒有轉置)內存塊。無論您在其上存儲什麼,它都會佔用與其形狀和數據類型相當的空間。 Scipy有稀疏的矩陣,可以用來忽略nans。 –
您可能會發現這[問題](https://stackoverflow.com/questions/1938894/csv-to-sparse-matrix-in-python)有用,它從CSV構造一個稀疏的scipy矩陣。 –