我在写一个关于图像处理的程序。我需要存储一个大小为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中。所以我不认为这个问题是那个问题的重复。 –