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

如何使用matlab创建一个非常大的矩阵,matlab,Matlab,当我试图创建一个非常大的矩阵(比如40000x40000)时,matlab有一个问题 例如: x=零(4000040000) 错误消息为?超过程序允许的最大变量大小 有什么解决办法吗 我还有另一个问题,我们可以用一个列大小可变的矩阵,比如java。40k*40k=>1.6*10^9数字。我相信零将返回浮动。因此,您需要大约1.6*10^9个浮点*4字节/浮点=>6.4GB的RAM,仅此一个变量 您是舒尔公司的产品,需要这么大的阵列吗?40000*40000*8字节/数字=12 GB,您肯定没有足

当我试图创建一个非常大的矩阵(比如40000x40000)时,matlab有一个问题

例如:

x=零(4000040000)

错误消息为?超过程序允许的最大变量大小

有什么解决办法吗


我还有另一个问题,我们可以用一个列大小可变的矩阵,比如java。

40k*40k=>1.6*10^9数字。我相信零将返回浮动。因此,您需要大约1.6*10^9个浮点*4字节/浮点=>6.4GB的RAM,仅此一个变量


您是舒尔公司的产品,需要这么大的阵列吗?

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

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

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

不,嗯,是的,买更多的ram,如下所述。 稀疏只删除零个元素

在matlab中,您可以将新的列/行添加到矩阵中,以生成更大的矩阵


啊,但你的意思是,你能有一个矩阵,其中一列是10行,另一列是20行,例如。不,你不能那样做。我不认为您可以使用Java tbh。

如果您真的需要这么大的矩阵,您可以使用(和)同时利用多台机器的内存。这将允许您编写:

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

matlabpool open

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

例如,如果这些数字始终是小整数,则使用uint8或int8,或逻辑阵列,甚至单个阵列,与双阵列相比,所有这些都将减少内存需求。或者根据需要使用稀疏存储形式。这在很大程度上取决于您将如何处理阵列


对于一行中可变数量的元素,在这里使用单元格数组,而不是简单的传统数组。

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

解决内存问题的一种方法可能是为矩阵创建一个新的数组。我的理解是,它跳过内存,直接写入硬盘。我曾经尝试过这样做,因为矩阵太大,不适合我那台弱小的计算机的内存,虽然速度很慢,但确实有效。你可能需要一次一点地建立它