Matlab 连接两个以上的矩阵-内存不足错误

Matlab 连接两个以上的矩阵-内存不足错误,matlab,matrix,Matlab,Matrix,我想连接一些矩阵(20-30)。我写了一个简单的函数: function [ appendedResults ] = appendResults( startNumber, endNumber ) str2 = '_simulation.xlsx'; str1 = num2str(startNumber); InputFilename = strcat(str1, str2); appendedResults = uint16( xlsread(InputFilename )

我想连接一些矩阵(20-30)。我写了一个简单的函数:

function [ appendedResults ] = appendResults( startNumber, endNumber  )

str2 = '_simulation.xlsx';
str1 = num2str(startNumber);
InputFilename = strcat(str1, str2);     

appendedResults =  uint16( xlsread(InputFilename ) );

for i= startNumber+1  :  endNumber
    temp_simulationResults = uint16( xlsread(InputFilename ) );
    appendedResults = vertcat( appendedResults, temp_simulationResults );
end

filename1 = strcat('appended',  str2);  
xlswrite(filename1, appendedResults);

end
如果我使用3-4个矩阵,效果很好。但当我使用更多时,会出现一个错误:

Error using xlswrite (line 219)
Error: Not enough memory
然后matlab使用6GB(!!)内存。矩阵只有7兆字节

我用for循环编写了另一个函数(没有Matlab Vertcat函数)。 我也犯了同样的错误

function [ appendedResults ] = appendResultsInOneMatrix( startNumber, endNumber )

str2 = '__simulation.xlsx';
str1 = num2str(startNumber);
InputFilename = strcat(str1, str2);     

numberOfItems = (endNumber - startNumber) + 1 ;

firstResults =   uint16(  xlsread(InputFilename ) );
[row , col] = size(firstResults);

appendedResults =   zeros ( row * numberOfItems , col);

for i=1: row
    for j=1:col
        appendedResults( i , j ) = firstResults( i , j);
    end
end

for i= startNumber+1 : endNumber

    str1 = num2str(i);
    InputFilename = strcat(str1, str2);

    temp_simulationResults = uint16( xlsread(InputFilename ) );
    [temp_row , temp_col] = size(temp_simulationResults);

    for m = 1 : temp_row
           for n = 1 :  temp_col

               appendedResults( m+row , n ) = temp_simulationResults( m , n);
           end

    end

end


    filename1 = strcat('appended',  str2); 
    xlswrite(filename1, appendedResults);

end

怎么了?

如果将矩阵串联起来,得到的维数将是输入矩阵的各个维数的最大值乘以矩阵的数目;例如,如果矩阵
A
为1x1000000,而矩阵
B
为1000000000,则这些矩阵的单个存储将仅为100万个元素,但生成的矩阵将需要存储2*1012个元素

编辑:此外,Excel文件绝对不是用于存储超过一百万个条目的表的存储空间

EDIT2:拿一张纸。在上面画一个1cm x 10cm(宽x高)的矩形,在上面写上“矩阵a”,这样你就知道矩形的方向,不要意外地旋转它。别说了。出于同样的原因,画一个10cm x 1cm的矩形,在上面写上“矩阵B”

连接两个矩形。您需要将此形状括起来的矩形的区域是什么?“矩阵A”和“矩阵B”矩形的面积之和是多少


矩阵是矩形的,默认情况下,您必须有足够的空间来存储包含矩阵串联的最小矩形。您可以通过在Matlab中使用稀疏矩阵来改变这一点(这是一个很长的主题,不能用一个StackOverflow答案来解释),但这不会改变您所做的可能毫无意义的事实。

Thanx回答!对不起,我不明白为什么需要10^12个元素来存储两个包含10^6个元素的矩阵。我能做什么?如何求解?所有矩阵都是35.000 x 57(35000行57列),所以当我连接两个矩阵时,将是70.000 x 57。如果我连接三个,那么105000 x 57.a)你确定是这样吗,b)对于xlswrite来说太大了,它需要更多的内存,而不仅仅是将内容写入excel文件的值。此外,我无法想象Excel能很好地处理105000 x 57表,那么为什么要以这种格式存储呢?这并不是针对那种数据的。是的,我把excel扔进了垃圾箱,我正在使用Matlab的保存功能。它很好用。非常感谢。有消息了吗,你现在明白我的答案了吗?