我在寫一個關於圖像處理的程序。我需要存儲一個大小爲480 000列和480 000行的int方陣。任何想法我怎麼能做到這一點?如何在C++中存儲大型矩陣
回答
不要使用480,000×480,000矩陣。
這個完整矩陣(假設它不是稀疏的)的唯一理由是隨機訪問(即能夠隨時訪問任何元素)。即使你能以某種方式實現這一目標(存儲0.9Tb),數據訪問將是非常緩慢,讓你的算法效率低(當映射到文件特別是)。
相反,想想一種重寫你的算法的方法,它不需要隨機訪問整個矩陣,但可能只有它的一小部分,你創建(然後刪除),或者需要減少存儲這些數據的任何其他方式。
高性能不僅僅是減少計算量,而且關鍵還在於減少隨機數據訪問。
您可以將它存儲在一個文件中,並將需要的矩陣部分映射到內存中。見例如http://en.wikipedia.org/wiki/Memory-mapped_file
只需通過映射文件爲矩陣分配內存。使用WinApi:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx或POSIX:http://ru.wikipedia.org/wiki/Mmap – k06a
http://stackoverflow.com/questions/11028478/linux-large-int-array-mmap-vs-seek-file –
@ k06a這將只在他有64位機器時才起作用。和一個非常大的磁盤有很大的可用空間。所需的總大小與Terabyte差不多。 –
如果您需要同時處理整個矩陣,並且大部分矩陣元素將變爲空白,那麼您應該考慮使用某種數據結構。許多線性代數庫支持稀疏矩陣(Boost.uBlas,Eigen等),以及一些圖像處理庫(OpenCV等)。
這取決於特徵矩陣都會有。
將它有大量的0?如果是這樣,你可以使用稀疏矩陣實現,它不存儲0。
如果它是一個帶狀矩陣可以存儲只是斜角帶。
您必須查看矩陣屬性並查看可以節省內存的位置。如果您找不到允許進行此類優化的任何屬性,那麼您將不得不將其存儲在文件中。
- 1. 矩陣如何存儲在內存中?
- 2. 存儲巨大的矩陣
- 3. 如何在矩陣中存儲多個數組的矩陣在C中
- 4. 在矩陣中存儲矩陣R
- 5. 在Rails應用程序中存儲大型矩陣
- 6. 如何在C#中存儲值的矩陣?
- 7. 如何在C++中存儲自定義對象的矩陣
- 8. 如何在C++的另一個矩陣的行內存儲矩陣?
- 9. 如何將巨大的矩陣存儲到數據庫中
- 10. 有限存儲器上大矩陣上的矩陣操作
- 11. Numpy無法在內存中存儲大於1GB的矩陣
- 12. C在字符陣列中存儲矩陣和打印
- 13. CUDA基本矩陣加 - 大型矩陣
- 14. 存儲和檢索大型稀疏矩陣
- 15. 如何存儲稀疏矩陣?
- 16. 如何在CUDA中更大的矩陣中複製矩陣
- 17. 在矩陣中存儲矩陣的可視化基礎6
- 18. 如何在MATLAB中的大符號矩陣操作中預分配存儲器
- 19. 在大型稀疏矩陣中查找所有矩陣的子矩陣
- 20. 在矩陣中存儲像素座標
- 21. 在Matlab中提取和存儲矩陣
- 22. R - 在Rcpp中存儲距離矩陣
- 23. 在大矩陣中找到矩陣
- 24. Django:將巨大的矩陣存儲在表或文件中?
- 25. 在Fortran中存儲不同大矩陣的最佳方法
- 26. 如何在Python中將矩陣複製到更大的矩陣?
- 27. 如何存儲在矩陣格式2D陣列(用逗號)
- 28. 如何總結矩陣的列並將其存儲在C++中的向量中
- 29. 如何轉置二維矩陣存儲爲C一維數組
- 30. C#如何創建一個存儲數據的數組/矩陣?
第一步是購買858GB的RAM。 –
問題已被問:http://stackoverflow.com/questions/1788942/how-to-create-a-2000020000-matrix-in-c –
@Bo:在這個問題中,矩陣可以放入RAM中。所以我不認爲這個問題是那個問題的重複。 –