【发布时间】:2011-01-20 21:43:21
【问题描述】:
我正在编写一个 MATLAB 程序,它将生成一个包含 100 万行和未知数量的列(最多 100 万)的矩阵。
我尝试预先分配这个矩阵:
a=zeros(1000000,1000000)
但我收到了错误:
“超出程序允许的最大变量大小。”
我有一种感觉,不预先分配这个矩阵会严重减慢代码的速度。
这让我很好奇:MATLAB 中的最大数组大小是多少?
更新:我将研究稀疏矩阵,因为我在这个特定问题中的目标是一个由大部分零组成的矩阵。
【问题讨论】:
-
您一定想知道为什么您的代码需要这么大的矩阵?也许使用稀疏矩阵会更好?
-
嗯...如果您想象一下,您分配了 1,000,000,000,000 个变量。如果你用它来表示比特,那将是一个太比特......这是巨大的。你可能代表一个 32 位整数,所以那是 ~32 太比特 ._。那......巨大......我真的怀疑你有 4000 GB 的内存。
-
这不会回答您的问题,但它可能有助于重新构建问题。你有多少可用内存?如果这些是双精度的,它们每个占用 8 个字节。这需要 10^12 * 8B = 8TB。你会把它存放在哪里?如果可以假设您的矩阵是稀疏的(即主要包含 0),则可以使用 Matlab 的
sparse命令生成稀疏矩阵。 -
请注意,预分配稀疏矩阵几乎从来都不是一个好主意。你永远不应该增量地构建一个稀疏矩阵,一次添加一个元素。