【问题标题】:Preallocating arrays of structures in Matlab for efficiency在 Matlab 中预分配结构数组以提高效率
【发布时间】:2013-02-27 01:27:19
【问题描述】:

在 Matlab 中,我希望预先分配一个名为 P 的 1x30 结构数组,其中包含以下结构字段:

           imageSize: [128 128]
orientationsPerScale: [8 8 8 8]
        numberBlocks: 4
          fc_prefilt: 4
   boundaryExtension: 32
                   G: [192x192x32 double]

G 不一定是 192x192x32,例如它可能是 128x128x16(尽管它有 3 个双精度类型的维度)。

我正在通过以下方式进行预分配:

P(30) = struct('imageSize', 0, 'orientationsPerScale', [0 0 0 0], ...
'numberBlocks', 0, 'fc_prefilt', 0, 'boundaryExtension', 0, 'G', []);

这是预分配这种结构的正确方法,还是会出现与 G 设置为空 [] 相关的性能问题?如果有更好的分配这种结构的方法,请提供一个例子。

此外,上述方法似乎有效(除了性能问题),但是,字段名称/值对的顺序似乎很重要,因为重新排列它们会导致在预分配后分配错误。为什么如此考虑到项目/值是按名称(而不是位置)引用的?

【问题讨论】:

    标签: performance matlab data-structures


    【解决方案1】:

    如果 G 设置为 Empty,解释器无法知道稍后将分配给它的大小数据,因此它可能会将数组项紧紧地打包在内存中,并且在没有时必须重做所有内容适合。

    预先定义 G 的尺寸上限并将其设置为该尺寸可能更有效。 zeroes 功能可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多