实际上,在编码方面,变量通常存储在内存中(您的计算机
RAM
)而不是进入硬盘空间。这就是你的错误所抱怨的。。。内存不足,无法存储要分配的变量。
Matlab使用的默认数值变量为
double
,用于表示双精度浮点值,并占用
8
字节的内存。因此,您试图分配:
37901 * 37901 * 8 = 11491886408 bytes
~= 10.7 gigabytes
当你只有
11.9
GB的可用内存,Matlab告诉您不能分配大于
4.7
千兆字节。作为解决方法,我建议您
Tall Arrays
,这是针对处理超大数据流而定制的Matlab功能:
高数组用于处理由支持的内存不足数据
数据存储。数据存储使您能够在中使用大型数据集
单独放入内存的小块,而不是加载
一次将整个数据集存储到内存中。高阵列扩展了这一点
使您能够使用公共
功能。
什么是高阵列?
由于数据不是一次性加载到内存中的,所以高数组在第一维中可以任意大
(也就是说,它们可以有任意数量的行)。而不是写作
考虑到巨大数据量的特殊代码,例如
与MapReduce等技术一样,高数组允许您处理大型
数据集的直观方式与
使用内存中的MATLAB阵列。许多核心操作符和函数
对高阵列的处理方式与对内存阵列的处理方式相同。
MATLAB一次处理小块数据,处理所有
在后台进行数据分块和处理,以便
表达式(如A+B)可用于大数据集。
高阵列的好处
与内存中的数组不同,在您请求计算
使用“聚集”功能执行。此延迟评估
允许您快速处理大型数据集。当你最终
使用gather请求输出,MATLAB结合排队计算
在可能的情况下,通过
数据通过数据的次数会极大地影响执行
时间,因此建议您仅在以下情况下请求输出
必需的