文件

解决“内存不足”错误

这个主题解释了几种策略,你可以使用MATLAB的情况®内存不足。MATLAB是一个64位应用程序,它在64位操作系统上运行。只要它从大于可用的操作系统请求的内存段,它会返回错误消息。

Matlab拥有内置保护,防止创建过大的阵列。默认情况下,MATLAB可以使用计算机的最多100%的RAM(不包括虚拟内存)来为数组分配内存,如果数组超过该阈值,则MATLAB返回错误。例如,此语句尝试创建具有不合理大小的数组:

a = rand(1e6,1e6);
使用RAND要求的rand 1000000x1000000(7450.6GB)数组超过最大数组大小偏好。创建大于此限制的阵列可能需要很长时间并导致MATLAB变得无响应。有关更多信息,请参阅数组大小限制或首选项面板。
工作区和变量首选项有关调整此阵大小限制的信息。如果关闭数组大小限制,则Matlab返回不同的错误:

a = rand(1e6,1e6);
内存不足。输入“帮助记忆”选项。

无论您如何遇到内存限制,都有几种可用的分辨率,具体取决于您的目标。金宝搏官方网站讨论的技术高效使用内存的策略可以帮助您优化您的可用内存,包括:

如果您已经有效地使用了内存,并且问题仍然存在,那么本页面的其余部分将包含可能的解决方案。金宝搏官方网站

利用阵列

用于内存不足数据的高数组旨在帮助您使用太大而无法适合内存的数据集。Matlab一次使用数据的小块,自动处理背景中的所有数据分集和处理。您可以利用高阵列的主要方式:

  1. 如果您有一个适合内存的大型数组,但是当您尝试执行计算时,您会运行内存,您可以将数组投入到高大的数组:

    B =高(A)
    这种方法使您能够使用可以装入内存的大型数组,但这些数组占用的内存太多,无法在计算期间复制数据。例如,如果您有8GB的RAM和5GB的矩阵,将矩阵转换为一个高数组可以使您在不耗尽内存的情况下对矩阵执行计算。看将内存中的数组转换为高数组下面是这个用法的一个例子。

  2. 如果您有基于文件或文件夹的数据,您可以创建数据存储然后在数据存储顶部创建一个高大的数组:

    ds =数据存储(“路径/ / data.csv”);tt =高(DS);
    这个方法为您提供了MATLAB中高数组的全部功能:数据可以有任意数量的行,并且MATLAB不会耗尽内存。因为数据存储处理本地和远程数据位置,您处理的数据不需要在用于分析它的计算机上。看使用远程数据为更多的信息。

利用多台机器的内存

如果你有一组计算机,你可以使用并行计算工具箱™分布式阵列(并行计算工具箱)来使用集群中所有机器的合并内存执行计算。这使您能够将整个分布式数组作为单个实体进行操作。然而,这些工作人员只在数组中他们自己的那部分进行操作,并在必要时在他们自己之间自动传输数据。

创建分布式数组与创建高阵列非常相似:

ds =数据存储(“路径/ / data.csv”);dt =分布式(ds);

只加载你需要的数据

修复内存问题的另一种可能的方法是只将MATLAB导入MATLAB,就像您需要解决的问题一样大的数据集。从数据库(如数据库)的源导入时,这通常不是问题,在那里您可以在其中显式搜索匹配查询的元素。但这是加载大型平面文本或二进制文件的常见问题。

数据存储功能使您可以逐步使用大数据集。这个功能支撑在内用于内存不足数据的高数组分布式阵列(并行计算工具箱),但您也可以将其用于其他目的。当您希望一次将一小部分数据集加载到内存中时,数据存储是非常有用的。

要创建数据存储,需要提供包含具有类似格式的文件集合的文件或目录的名称。例如,对于单个文件:

ds =数据存储(“路径/ / file.csv”
或者,在一个文件夹中有一组文件:
ds =数据存储(的路径/ /文件夹/
您还可以使用通配符*选择特定类型的所有文件,如:
ds =数据存储('数据/ *。CSV'
数据存储支持各种常用文金宝app件格式(表格数据,图像,电子表格等)。看“文件格式”或“应用程序”选择“数据存储”为更多的信息。

除了数据存储之外,Matlab还有几个其他功能来加载部分文件,如Matfile.函数加载MAT文件的部分。此表总结了文件类型的部分加载函数。

文件类型 部分加载
MAT-file

属性创建的对象的索引来加载变量的一部分Matfile.函数。看垫文件中的大数据下面是这个用法的一个例子。

文本

使用textscan函数通过只读取选定的列和行来访问大型文本文件的部分。如果指定行数或重复格式号textscan, MATLAB预先计算所需内存的精确数量。

二进制

您可以使用低级二进制文件I / O功能,例如从文件中读,以访问任何文件中具有已知格式的部分。对于未知格式的二进制文件,请尝试使用memmapfile.函数。

图像,HDF,音频和视频

许多支持从这些类型的文件加载的MATLAB函数允许您选择要读取的数据金宝app的部分。有关详细信息,请参阅列出的函数参考页金宝app支持的文件格式的导入和导出

增加系统交换空间

计算机上应用程序可用的总内存由物理内存(RAM)组成,以及A页面文件, 或者交换文件,在磁盘上。交换文件可以非常大(例如,64位窗口上的512 Tberytes®).操作系统根据系统和其他进程的需要,将每个进程的虚拟内存分配给物理内存或交换文件。增加交换文件的大小可以增加总的可用内存,但通常也会导致性能变慢。

大多数系统都允许您控制交换文件的大小。所涉及的步骤取决于你的操作系统:

  • Windows系统 - 使用Windows控制面板更改系统上虚拟内存分页文件的大小。有关更多信息,请参阅Windows帮助。

  • Linux.®的方法更改交换空间Mkswap.斯文音命令。有关更多信息,请查看Linux提示符类型男人。后面跟着命令名。

没有直接控制交换空间的接口macOS系统。

设置流程限制Linux.系统

过程限制是单个进程(或应用程序)可寻址的最大虚拟内存量。在不太可能的情况下,您已经设置了这个首选项,它必须足够大,以容纳:

  • 所有数据要处理

  • MATLAB程序文件

  • matlab可执行自己自己

  • 额外的国家信息

64位操作系统支持8 Tberabytes的过程限金宝app制。在Linux系统上,看看ulimit命令查看和设置用户限制,包括虚拟内存。

禁用java.VM上Linux.系统

在Linux系统上,如果你在没有Java的情况下启动MATLAB®JVM™,您可以将可用的工作空间内存增加大约400兆字节。要在没有Java JVM的情况下启动MATLAB,请使用命令行选项-nojvm.。此选项还将最大连续内存块的大小提高大约相同的数量。通过增加最大的连续内存块,可以提高最大可能的矩阵大小。

使用-nojvm.随之而来的后果是,您将失去许多依赖于Java软件的特性,包括整个开发环境。从MATLAB开始-Nodesktop.选项不保存任何大量的内存。

也可以看看

相关的话题