多少空间存储一个数字矩阵?

计算科学 高性能计算
2021-12-05 05:43:59

当我们进行数值分析时,当矩阵太大时,计算机内存不足(我猜是内存)。但是数字矩阵(整数、单数、双数)使用多少空间?我想知道这一点,以便能够确定我可以在笔记本电脑中计算多大的矩阵。

1个回答

如果您考虑一个 4 x 4 整数矩阵,它将作为唯一的整数数组存储在内存中。由于每个整数是 4 个字节(32 位)(有时不是,但在这里并不重要),那么您使用的正是 4*16 = 64 个字节。对于双精度数,只需记住每个双精度数通常是 8 个字节(64 位)。

矩阵可以按行主要或列主要顺序存储,这对于例如当您尝试使用循环访问元素时至关重要,因为您必须越多地跳过内存位置,您的代码就会越慢。例如,如果您尝试对小型矩阵实施朴素高斯消元法,您会发现面向行的版本可能比面向列的版本慢得多:这取决于事物的存储方式,即使算法是一样的!

C++ 可能是理解这些细节的最佳语言,因为它允许您处理内存。例如,让我们看看 C++ 中二维数组在内存中的地址:

#include <iostream>

int main() {

    int m[4][4] { }; //4 by4 matrix with all zeros (default value for ints) allocated on the stack
    for (unsigned int i = 0; i < 4; ++i) {
        for (unsigned int j = 0; j < 4; ++j) {
            std::cout << &m[i][j] << "\t";
        }
        std::cout << "\n";
    }
    return 0;
}

这给出了输出

0x7ffeec242400  0x7ffeec242404  0x7ffeec242408  0x7ffeec24240c  
0x7ffeec242410  0x7ffeec242414  0x7ffeec242418  0x7ffeec24241c  
0x7ffeec242420  0x7ffeec242424  0x7ffeec242428  0x7ffeec24242c  
0x7ffeec242430  0x7ffeec242434  0x7ffeec242438  0x7ffeec24243c  

如您所见,我们有一个以行为主的排序。

请注意,对于实际应用程序或大型问题,我们被迫使用稀疏矩阵,这要复杂得多。您必须考虑如何存储它们,如何访问元素,并且实现一点也不简单,它是一个活跃的研究领域