2010-02-02 2188 views
8

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

例如:

X =零(40000,40000);

的错误信息为“超过由程序允许???最大可变大小”。

没有任何解决方案。

另外我还有一个问题,我们可以有一个可变列大小的矩阵,如在Java中。

回答

1

40k * 40k => 1.6 * 10^9数字。我相信零将会返回花车。所以你需要大约1.6 * 10^9浮点* 4字节/浮点=> 6.4GB的RAM只为这一个变量...

你确定你需要这么大的数组吗?

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 
0

不,好吧是购买更多内存,如下所示。 稀疏只是删除零个元素。

而在matlab中,您可以将新的列/行添加到矩阵中以制作更大的矩阵。

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

4

有很多事情可以做,因为各种答案指出。正确的答案取决于你的实际问题。如果没有64位版本的matlab和足够的内存来存储大型数组,或者以其他方式存储数组,那么这种大型数组的强力创建是不可能的。您可以离线存储阵列,只在您使用时引入您需要的内容。例如,如果这些数字总是小整数,则使用uint8或int8或逻辑数组,即使是单个数组,所有这些都会减少内存需求,与双数组相比。或者酌情使用稀疏存储表单。很大程度上取决于你将如何处理阵列。

就一行中可变数量的元素而言,在这里使用单元数组,而不是平坦的传统数组。

0

我认为使用硬盘上的文件来存储数据是最好的选择解决内存问题

1

一种方式是创建您的矩阵matfile。我理解它的方式是跳过内存并将其直接写入硬盘。我已经尝试过这样的矩阵,对于我的懦弱计算机的内存来说太大了,而且速度很慢,但它确实有效。您可能需要一次构建它。