我们如何在matlab中处理大型矩阵(大于10000x10000)

Abo*_*azl 2 matlab large-data-volumes

在我的程序中,我遇到了一些大于10000x10000的矩阵.我无法转置或反转它们,如何克服这个问题?

??? Error using ==> ctranspose
Out of memory. Type HELP MEMORY for your options.
Error in ==> programname1 at 70
    B = cell2mat(C(:,:,s))'; 
Out of memory. Type HELP MEMORY for your options.
Example 1: Run the MEMORY command on a 32-bit Windows system:


    >> memory
    Maximum possible array:             677 MB (7.101e+008 bytes) *
    Memory available for all arrays:   1602 MB (1.680e+009 bytes) **
    Memory used by MATLAB:              327 MB (3.425e+008 bytes)
    Physical Memory (RAM):             3327 MB (3.489e+009 bytes)

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

Example 2: Run the MEMORY command on a 64-bit Windows system:

    >> memory
    Maximum possible array:               4577 MB (4.800e+009 bytes) *
    Memory available for all arrays:      4577 MB (4.800e+009 bytes) *
    Memory used by MATLAB:                 330 MB (3.458e+008 bytes)
    Physical Memory (RAM):                3503 MB (3.674e+009 bytes)
Run Code Online (Sandbox Code Playgroud)

================================================== ============================

 memory
% Maximum possible array:            1603 MB (1.681e+009 bytes) *
% Memory available for all arrays:   2237 MB (2.346e+009 bytes) **
% Memory used by MATLAB:              469 MB (4.917e+008 bytes)
% Physical Memory (RAM):             3002 MB (3.148e+009 bytes)


I have used sparse for C. 

B = cell2mat(C);
clear C       %#  to reduce the allocated RAM
P=B\b;

Name         Size                  Bytes  Class     Attributes     

  B         5697x5697            584165092  double    sparse, complex
  C         1899x1899            858213576  cell                     
  b         5697x1                   91152  double    complex        

==============================================================================
??? Error using ==> mldivide
Out of memory. Type HELP MEMORY for your options.

Error in ==> programname at 82
    P=B\b; 

==============================================================================
Run Code Online (Sandbox Code Playgroud)

编辑:27.05.11

Name         Size                  Bytes  Class     Attributes

  C          997x997             131209188  cell   
  B            2991x2991             71568648  single    complex        
  Bdp          2991x2991            143137296  double    complex        
  Bsparse      2991x2991            156948988  double    sparse, complex

  Bdp=double(B);
  Bsparse=sparse(Bdp);
Run Code Online (Sandbox Code Playgroud)

我使用单精度,女性给出了与双精度相同的精度

它更好,我是对的吗?

Edr*_*ric 5

一些建议:

  1. 如果可能,正如@yoda建议的那样,使用稀疏矩阵
  2. 你真的需要倒数吗?如果要解决线性系统(Ax=b),则应使用MATLAB的反斜杠运算符.
  3. 如果你真的需要巨大的密集矩阵,你可以利用分布式阵列MATLAB分布式计算服务器来利用几台机器的内存.