Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何修复10800x10800矩阵在Matlab中的内存不足错误?_Windows_Matlab_Out Of Memory - Fatal编程技术网

Windows 如何修复10800x10800矩阵在Matlab中的内存不足错误?

Windows 如何修复10800x10800矩阵在Matlab中的内存不足错误?,windows,matlab,out-of-memory,Windows,Matlab,Out Of Memory,情境:如何应对“走出困境” “内存”错误 基本上,问题是我使用10800x10800矩阵。我使用32位windows系统。 执行此操作时出现内存不足错误: a=zeros(10800,10800); 这就是我的记忆: >> memory Maximum possible array: 393 MB (4.120e+08 bytes) * Memory available for all arrays: 1097 MB (1.150e+09 bytes) ** Memory

情境:如何应对“走出困境” “内存”错误

基本上,问题是我使用10800x10800矩阵。我使用32位windows系统。 执行此操作时出现内存不足错误:

a=zeros(10800,10800);
这就是我的记忆:

>> memory
Maximum possible array:    393 MB (4.120e+08 bytes) *
Memory available for all arrays:   1097 MB (1.150e+09 bytes) **
Memory used by MATLAB:    639 MB (6.697e+08 bytes)
Physical Memory (RAM):    895 MB (9.387e+08 bytes)

*  Limited by contiguous virtual address space available.
** Limited by virtual address space available.

系统:Windows 32位

如果矩阵中有很大一部分将保持为零,请使用

如果不是这样(矩阵密集),您可以选择以下选项:

  • 使用几个较小的矩阵分部分解决问题
  • 使用具有大量内存的计算机,并使用大型密集矩阵

如果矩阵中有很大一部分将保持为零,则使用

如果不是这样(矩阵密集),您可以选择以下选项:

  • 使用几个较小的矩阵分部分解决问题
  • 使用具有大量内存的计算机,并使用大型密集矩阵

矩阵存储在连续的内存块中。当处理非常大的矩阵时,这些块的分配可能会有问题(仅仅因为可能找不到足够大的空闲内存块)

由于您没有提供有关代码的任何详细信息,因此我只能建议解决此问题的方法:

  • 如果您的矩阵包含许多零,请将其表示为一个。通过不存储零,它使用更少的内存来存储这样的矩阵

  • 将矩阵分解为更小的块,并相应地修改算法

  • 如果数据类型能够适应您正在使用的值的范围,请使用更高效的数据类型,而不是双精度数据类型(这一建议要归功于Amro和Rody)。考虑使用或(也要注意无符号整数)!


  • 矩阵存储在连续的内存块中。当处理非常大的矩阵时,这些块的分配可能会有问题(仅仅因为可能找不到足够大的空闲内存块)

    由于您没有提供有关代码的任何详细信息,因此我只能建议解决此问题的方法:

  • 如果您的矩阵包含许多零,请将其表示为一个。通过不存储零,它使用更少的内存来存储这样的矩阵

  • 将矩阵分解为更小的块,并相应地修改算法

  • 如果数据类型能够适应您正在使用的值的范围,请使用更高效的数据类型,而不是双精度数据类型(这一建议要归功于Amro和Rody)。考虑使用或(也要注意无符号整数)!



  • 你考虑过使用稀疏矩阵吗?你的矩阵是933MB!这会让你产生一个自我解释的问题@fpe:实际上它是:
    10800*10800*8/2^20=889.89MB
    (即连续内存)。使用
    m=内存;m、 maxpossibleraybytes/2^20
    查看您可以分配的矩阵有多大人们似乎认为您的矩阵基本上保持为零;这是真的吗?对于这个问题,你将使用你的矩阵做什么?好吧,你有,你有比你的内存允许更多的数据。所以唯一的问题是,你需要它在内存中同时可用吗?如果没有,则将其分解为子矩阵,并分别处理每个子矩阵,清除不再需要的旧数据。否则,移动到64位机器并购买更多RAM:)您是否考虑过使用
    sparse
    矩阵?您的矩阵是
    933MB
    !这会让你产生一个自我解释的问题@fpe:实际上它是:
    10800*10800*8/2^20=889.89MB
    (即连续内存)。使用
    m=内存;m、 maxpossibleraybytes/2^20
    查看您可以分配的矩阵有多大人们似乎认为您的矩阵基本上保持为零;这是真的吗?对于这个问题,你将使用你的矩阵做什么?好吧,你有,你有比你的内存允许更多的数据。所以唯一的问题是,你需要它在内存中同时可用吗?如果没有,则将其分解为子矩阵,并分别处理每个子矩阵,清除不再需要的旧数据。否则,移动到64位机器并购买更多RAM:)3)如果可能,使用
    而不是
    。这将把所需的内存减少一半(如:
    zero([1080010800],'single')
    )@Amro:当然,如果可能的话,还可以使用更小的类型(
    logical
    int8
    ,…)。取决于OP课程的实际问题我编辑了我的原始帖子伙计们,请检查一下。显然,我的数组大小大于Matlab设置的限制。我如何增加这些?@user2225930您的编辑与其他人已经给您的解决方案无关。您可以选择迁移到64位操作系统+购买更多RAM、重写代码以使用块处理、使用智能数据类型。稀疏数组通常在填充的数组不到一半时比较方便。我在这里尝试对大矩阵进行矢量化,特别是在这里3)如果可能的话,使用
    single
    而不是
    double
    。这将把所需的内存减少一半(如:
    zero([1080010800],'single')
    )@Amro:当然,如果可能的话,还可以使用更小的类型(
    logical
    int8
    ,…)。取决于OP课程的实际问题我编辑了我的原始帖子伙计们,请检查一下。显然,我的数组大小大于Matlab设置的限制。我如何增加这些?@user2225930您的编辑与其他人已经给您的解决方案无关。您可以选择迁移到64位操作系统+购买更多RAM、重写代码以使用块处理、使用智能数据类型。稀疏数组通常在填充的数组不到一半时比较方便。我在这里尝试对大矩阵进行矢量化,特别是在这里,它不是稀疏矩阵,稍后会用非零值填充。谢谢。顺便问一下,我可以修改Matlab使用了多少内存吗?我的意思是,我可以增加这些限制吗?看这里,它不是稀疏矩阵,它是ge
    S = sparse(10800, 10800)