如何解决预分配单个单元格的内存
我正在编写代码,想知道如何为单个单元预先分配内存。我知道人们可以轻松地预先分配一组单元格,但这不是我想要的。
我的代码遵循以下逻辑:
for i = 1:numel(k)
R{i} = % Some 4x4 matrix That changes each iteration
end
R = blkdiag(R{:});
R = {A,B,C,D,E,...}
这样 blkdiag
将返回以下内容:
R = [A 0 0...
0 B 0...
0 0 C...
... ]
我现在拥有的代码运行良好,我只想知道如何为这种情况预先分配内存,以便在我有大量矩阵时运行得更快。
解决方法
如果您的元胞数组已预先分配,则将矩阵放入元胞数组不会导致元胞数组的大小调整。 R = cell(numel(k),1)
将预分配元胞数组。此数组的每个元素都是对数组的引用(或任意类型,可以是数值数组、另一个元胞数组、结构数组、自定义对象数组,无关紧要)。
首次创建元胞数组时,每个元胞都包含一个空矩阵 []
。替换此矩阵只会将元胞数组中存储的引用更改为指向不同的数组。 R{3} = x
不会重新分配内存,它只是将 R{3}
中的引用更改为现在指向存储在变量 x
中的任何矩阵。
另一方面,如果您想向存储在 R{3}
中的数组添加值,您应该预先分配该数组:
R{3} = zeros(5,1); % preallocate the array pointed to by R{3}
for ii=1:5
R{3}(ii) = ii;
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。