1

在 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 设置为空 [] 相关的性能问题?如果有更好的方法来分配这个结构,请提供一个例子。

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

4

1 回答 1

1

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

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

于 2013-02-27T01:49:01.040 回答