我正在编写一个关于图像处理的程序。我需要存储一个大小为480 000列和480 000行的int方阵。任何想法我该怎么做?
答案 0 :(得分:4)
不要使用480,000 x 480,000矩阵。
拥有这个完整矩阵(假设它不稀疏)的唯一原因是具有随机访问(即能够随时访问任何元素)。即使您可以以某种方式实现此目的(存储0.9Tb),数据访问将极其慢(特别是在将其映射到文件时),从而使您的算法效率低下。
相反,想一想重新编写算法的方法,这样就不需要随时随机访问整个矩阵,但可能只需要创建(然后删除)的一小部分。在需要时,或任何其他方式减少存储这么多数据的需要。
高性能不仅仅是减少计算量,更重要的是减少随机数据访问。
答案 1 :(得分:3)
您可以将其存储在文件中,并将您需要的矩阵部分映射到内存中。参见例如http://en.wikipedia.org/wiki/Memory-mapped_file
答案 2 :(得分:3)
如果你需要同时处理整个矩阵,并且大多数矩阵元素都是空白的,那么你应该考虑使用某种sparse matrix数据结构。许多线性代数库支持稀疏矩阵(Boost.uBlas,Eigen等),以及一些图像处理库(OpenCV等)。
答案 3 :(得分:1)
这取决于矩阵的特征。
它会有很多0吗?如果是这样,您可以使用稀疏矩阵实现,它不存储0。
如果是带状矩阵,则只能存储对角线带。
您必须查看矩阵属性并查看可以节省内存的位置。如果找不到允许此类优化的任何属性,则必须将其存储在文件中。
答案 4 :(得分:0)