我正在尝试加快我在 Matlab 中编写的脚本,该脚本动态地将内存分配给矩阵(基本上从文件中读取一行数据并将其写入矩阵,然后读取另一行并为更大的矩阵分配更多内存存储下一行)。我这样做而不是使用 zeroes() 或其他东西预分配内存的原因是我不知道矩阵需要保持所有数据的确切大小。我也不知道矩阵的最大大小,所以我不能只预先分配一个最大大小然后摆脱我没有使用的内存。这对于少量数据来说很好,但是现在我需要扩展我的脚本以读取数百万个数据点,而这种动态分配的实现实在是太慢了。
所以这是我加快脚本速度的尝试:我尝试使用 zeroes 函数在大块中分配内存,然后一旦块被填满,我就分配另一个大块。这是一些示例代码:
data = [];
count = 0;
for ii = 1:num_filelines
if mod(count, 1000) == 0
data = [data; zeroes(1000)]; %after 1000 lines are read, allocate another 1000 line
end
data(ii, :) = line_read(file); %line_read reads a line of data from 'file'
end
不幸的是,这不起作用,当我运行它时,我收到一条错误消息“错误使用 vertcat 连接的矩阵的维度不一致。”
所以这是我的问题:这种在大块中分配内存的方法实际上是否比增量动态分配更快,以及为什么上面的代码不运行?谢谢您的帮助。