当我们进行数值分析时,当矩阵太大时,计算机内存不足(我猜是内存)。但是数字矩阵(整数、单数、双数)使用多少空间?我想知道这一点,以便能够确定我可以在笔记本电脑中计算多大的矩阵。
多少空间存储一个数字矩阵?
计算科学
高性能计算
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
如您所见,我们有一个以行为主的排序。
请注意,对于实际应用程序或大型问题,我们被迫使用稀疏矩阵,这要复杂得多。您必须考虑如何存储它们,如何访问元素,并且实现一点也不简单,它是一个活跃的研究领域
其它你可能感兴趣的问题