MATLAB将空间预分配到while循环

时间:2015-10-07 08:17:34

标签: arrays matlab loops memory

我一直找不到足够的例子来帮助我解决我在循环中预先分配空间的问题。

我的while循环有以下代码:

Time = [];
Pressure = [];

ii = 1;

while ii<=20000

Pressure_Data = fread(fileID, 2);
Pressure = [Pressure;Pressure_Data];
Time_Data = fread(fileID, 8);
Time = [Time;Time_Data];

ii = ii + 1;

end

然后我在Pressure_Data和Time-Data "Appears to change size on every loop iteration. Consider preallocating for speed."

下获得警告波形

所以我想预先分配空间,因为此时读取文件和存储数据的时间需要一些时间。

到目前为止我的尝试:

Time = zeros(160000,1);
Pressure = zeros(40000,1);

但是我只得到一个零数组而不是我需要的读取和存储值

1 个答案:

答案 0 :(得分:4)

当前的压力值和时间值附加到现有数组:

Pressure = [Pressure;Pressure_Data];
Time = [Time;Time_Data];

您真正想要的是将当前值写入数组中的正确位置。这是由

完成的
Pressure(2*ii-1 : 2*ii) = Pressure_Data;
Time(8*ii-7 : 8*ii) = Time_Data;

索引按如下方式组成:在第一次迭代(ii=1)中,我们写入Pressure(1 : 2)Time(1 : 8)。在第二次迭代(ii=2)中,我们会写入Pressure(3 : 4)Time(9 : 16),依此类推。

另一个小输入:当你让ii从1到20000时,你也可以使用for循环:

for ii=1:20000
    Pressure(2*ii-1 : 2*ii) = fread(fileID, 2);
    Time(8*ii-7 : 8*ii) = fread(fileID, 8);
end