复制数组但不增加内存使用量

时间:2016-08-16 17:36:52

标签: matlab memory struct

这是一个奇怪的问题,但希望有人能够帮助我。 我有一个matlab代码,由于代码的并行化性质,我需要使用struct数组。

运行parfor循环后,我想将这些结构数组转换为三维数组。

目前我正在使用以下代码:

for k = 1:nsim
    ksim(:,:,k) = st(k).ksim;
    Msim(:,k) = st(k).Msim;
    Vsim(:,:,k) = st(k).Vsim;
    Psim(:,:,k) = st(k).Psim;
end
clearvars st

然而,这似乎是非常低效的,因为暂时的matlab需要将所有矩阵加倍,因此almos将内存使用量增加一倍。 在没有增加大量内存使用的情况下实现这一目标的任何更聪明的方法?

1 个答案:

答案 0 :(得分:0)

我不认为这是你正在寻找的答案;但这是一种改进。

定义新数组并逐个删除字段。由于似乎有三个巨大的输出,这将使内存使用的峰值降低到~130%而不是200%。

for k = 1:nsim
    ksim(:,:,k) = st(k).ksim;
end
st = rmfield(st , 'ksim');
for k = 1:nsim
    Msim(:,k) = st(k).Msim;
end
st = rmfield(st , 'Msim');

等等。