MATLAB中的最大数组大小?

Pie*_*ter 6 matlab memory-management

我正在编写一个MATLAB程序,它将生成一个包含100万行和未知列数(最多100万)的矩阵.

我试过预先分配这个矩阵:

a=zeros(1000000,1000000)
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误:

"超出了程序允许的最大变量大小."

我有一种感觉,即不预先分配这个矩阵会严重降低代码的速度.

这让我很好奇:MATLAB中的最大数组大小是多少?

更新:我将研究稀疏矩阵,因为我在这个特定问题中的目标是一个由大部分零组成的矩阵.

Coo*_*une 8

看一下这个页面,它列出了最大尺寸:最大尺寸

它看起来大约有几亿.请注意,您在此处尝试创建的矩阵是:10e6*10e6 = 10e12个元素.这比提供的最大尺寸大许多个数量级,并且您的系统上也没有那么多RAM.

我的建议是针对你想要完成的事情研究一种不同的算法.


Jon*_*nas 6

要找出实际的最大数组大小(仅限Windows),请使用命令user = memory.user.maxPossibleArrayBytes显示连续RAM的空闲字节数.除以数组中每个元素的字节数(双精度数为8),您就知道可以预分配的最大元素数.

请注意,正如木片所说,Matlab可能必须复制您的数组(例如,如果您将值传递给子函数).根据我的经验,75%的最大可能阵列通常可以多次使用.

  • 我同意上述内容,只是想指出MATLAB在将矩阵传递给函数时使用了写时复制机制,这意味着除非该函数改变了输入,否则它就像通过引用传递一样. (5认同)