Performance 在Matlab中预分配结构阵列以提高效率
在Matlab中,我希望使用以下结构字段预先分配一个名为p的1x30结构数组: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
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的维数上限并将其设置为该大小可能更有效。零函数可能会有所帮助