微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

预分配单个单元格的内存

如何解决预分配单个单元格的内存

我正在编写代码,想知道如何为单个单元预先分配内存。我知道人们可以轻松地预先分配一组单元格,但这不是我想要的。

我的代码遵循以下逻辑:

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 举报,一经查实,本站将立刻删除。