Matlab 结构数组导入-内存预定位问题

Matlab 结构数组导入-内存预定位问题,matlab,memory,data-structures,import,Matlab,Memory,Data Structures,Import,我有几个.mat文件,每个文件都有一个名为DATA的结构数组(长度未知)。我想在单个数组中导入所有这些结构,但不想使用以下代码: FileNames = strcat('file',num2str((1:N)''),'.mat'); DATATemp = []; for int = 1:length(FileNames) load(FileNames(int,:)); DATATemp=[DATATemp DATA]; end DATA = DATATemp; 因为它没

我有几个.mat文件,每个文件都有一个名为DATA的结构数组(长度未知)。我想在单个数组中导入所有这些结构,但不想使用以下代码:

FileNames = strcat('file',num2str((1:N)''),'.mat'); 
DATATemp = [];

for int = 1:length(FileNames)
    load(FileNames(int,:));
    DATATemp=[DATATemp DATA];
end 

DATA = DATATemp;
因为它没有预先定位阵列的内存


有什么聪明的方法可以做到这一点吗?

如果长度足够短,您可以过度分配内存,您可以这样做:选择一个比您将看到的大得多的数组大小,然后在完成后将其修剪回去

FileNames = strcat('file',num2str((1:N)''),'.mat'); 
DATATemp = zeros(1e6,1);

idx = 1;
for int = 1:length(FileNames)
    load(FileNames(int,:));
    idx_end = idx + length(DATA) - 1;
    DATATemp(idx:idx_end) = DATA;
    idx = idx_end + 1;
end 

DATA = DATATemp(1:idx_end);
然而,如果您谈论的是大量数据,或者只是想涵盖所有基础数据,则更严格的解决方案是分块分配

FileNames = strcat('file',num2str((1:N)''),'.mat');

CHUNK_SIZE = 1e6; 
DATATemp = zeros(INIT_SIZE,1);

idx = 1;
for int = 1:length(FileNames)
    load(FileNames(int,:));
    idx_end = idx + length(DATA) - 1;
    if idx_end > length(DATATemp)
        DATATemp = [DATATemp zeros(INIT_SIZE ,1);
    DATATemp(idx:idx_end) = DATA;
    idx = idx_end + 1;
end 

DATA = DATATemp(1:idx_end);
只需确保您的CHUNK_大小明显大于典型单个文件的大小。我在这里选了1e6。如果我加载约20个文件,每个文件的平均大小为1e5,我会选择这个。这样,虽然我仍然在连接更多的空间,但它的频率要低得多。这可能不是很聪明,但我希望能有所帮助

还要注意的是,如果从网络驱动器加载文件,会大大降低速度