如何使用matlab创建一个非常大的矩阵

时间:2010-02-02 11:14:24

标签: matlab

当我尝试创建一个非常大的矩阵,例如40000x40000时,我遇到了matlab的问题。

例如:

X =零(40000,40000);

错误信息是“???超出了程序允许的最大变量大小。”

有没有解决方案。

另外我还有另一个问题,我们是否可以使用可变列大小的矩阵,例如java。

7 个答案:

答案 0 :(得分:16)

40000 * 40000 *每个数字8个字节= 12 GB,肯定没有足够的内存。

要创建一个包含大量零的巨大矩阵,您需要一个稀疏矩阵

m = sparse(40000, 40000)

要创建变体数组,可以使用单元格数组

m = cell(3, 1)
m(1) = [1,2,3]
m(2) = [2,4,6,8,10]
m(3) = 6+6i

答案 1 :(得分:4)

你可以做很多事情,正如各种答案所指出的那样。正确答案取决于您的实际问题。如果没有64位版本的matlab加上足够的内存来存储那么大的数组,或者以其他方式存储数组,那么就不可能创建如此庞大的数组。您可以离线存储阵列,只在您使用时引入所需内容。

例如,如果这些数字总是小整数,那么使用uint8或int8,或逻辑数组,甚至是单个数组,与双数组相比,所有这些都会降低内存需求。或者根据需要使用稀疏存储表单。很大程度上取决于你将对阵列做什么。

对于一行中可变数量的元素,请在此处使用单元格数组,而不是平面传统数组。

答案 2 :(得分:3)

如果你真的需要一个很大的矩阵,你可以使用Parallel Computing Toolbox(和MATLAB Distributed Computing Server)同时利用几台机器的内存。这将允许你写:

matlabpool open <a large number>
x = distributed.zeros( 40000, 40000 );

另请参阅:doc for codistributed arrays

答案 3 :(得分:1)

40k * 40k =&gt; 1.6 * 10 ^ 9数字。我相信Zeros将返回花车。所以你需要大约1.6 * 10 ^ 9 Floats * 4 Bytes / Float =&gt;只有这一个变量的6.4GB RAM ......

你真的觉得你需要这么大的阵列吗?

答案 4 :(得分:1)

解决内存问题的一种方法可能是为矩阵创建matfile。我理解它的方式是它跳过内存并将其直接写入硬盘。我已经尝试过这个对于我的懦弱的计算机内存而言太大的矩阵,而且它很慢,但确实有效。你可能不得不一次建立它。

答案 5 :(得分:0)

不,是的,请购买更多的公羊,如下所述。 Sparse只删除零元素。

在matlab中,你可以将新的col /行附加到矩阵中以形成更大的矩阵。

啊,但你的意思是,你有一个矩阵,其中一列是10行,另一列是20。不,你做不到。没想到你可以用Java tbh。

答案 6 :(得分:0)

我认为使用硬盘文件存储该数据是最佳选择