Performance 在Matlab中预分配结构阵列以提高效率

Performance 在Matlab中预分配结构阵列以提高效率,performance,matlab,data-structures,Performance,Matlab,Data Structures,在Matlab中,我希望使用以下结构字段预先分配一个名为p的1x30结构数组: imageSize: [128 128] orientationsPerScale: [8 8 8 8] numberBlocks: 4 fc_prefilt: 4 boundaryExtension: 32 G: [192x192x32 double] G可能不一定是192x192x32,例如,它可能是128x1

在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个double类型的维度)

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

P(30) = struct('imageSize', 0, 'orientationsPerScale', [0 0 0 0], ...
'numberBlocks', 0, 'fc_prefilt', 0, 'boundaryExtension', 0, 'G', []);
这是预分配此类结构的正确方法,还是将G设置为空[]会出现性能问题?如果有更好的方法分配此结构,请提供一个示例


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

如果G被设置为空,那么解释器无法知道稍后将归属于它的数据大小,因此它可能会将数组项压缩在内存中,并且在不适合时必须全部重做


事先定义G的维数上限并将其设置为该大小可能更有效。zeroes函数可能会有所帮助。

如果G被设置为空,解释器无法知道稍后将归属于它的数据大小,因此它可能会将数组项压缩在内存中,并且在不适合时必须全部重做

事先定义G的维数上限并将其设置为该大小可能更有效。零函数可能会有所帮助