6

直到最近,我一直struct在 MATLAB 中将时间序列数据存储在 s 中,方法是将索引放在字段名称之后,例如:

Structure.fieldA(1) = 23423

所以,结构体有一组字段,每个字段都是一个向量。

我见过很多其他程序使用不同的格式,其中结构本身被索引,并且结构的每个索引都包含一组字段,例如:

Structure(1).fieldA

哪种方法最有效?我应该坚持使用顶部选项还是应该将程序切换到使用底部方法?

4

1 回答 1

6

struct每个字段都是数组的A性能更高,因为您的数据元素更少(每个字段一个数组),而struct数组在性能和内存使用方面具有更大的灵活性(struct每个字段的元素)。

来自 MATLAB 自己的文档

每个字段的结构需要相似数量的开销。具有许多字段和小内容的结构具有很大的开销,应该避免。具有数值标量字段的大型结构数组比具有包含大型数值数组的字段的结构需要更多的内存。

我们可以通过一个简单的例子来检查内存使用情况

S = struct('field1', {1, 2}, 'field2', {3, 4});
SArray = struct('field1', {[1,2]}, 'field2', {[3,4]});

whos S*
%  Name        Size            Bytes  Class     Attributes
%
%  S           1x2               608  struct
%  SArray      1x1               384  struct

数组提供的一些灵活性struct包括能够轻松获取数据的子集:

subset = SArray(1:3);

% Compared to
subset.field1 = S.field1(1:3);
subset.field2 = S.field2(1:3);

此外,能够存储可能不容易放入数组的不同大小的数据。

S(1).field1 = [1,2];
S(2).field1 = 3;

哪种解决方案更好,实际上取决于数据以及您如何使用它。如果您有大量数据,则第一个选项可能会更可取,因为它的内存占用量较小。

如果您的代码适合您,我不会担心仅仅为了使用不同的约定而转换它,除非您遇到性能问题(在这种情况下使用struct数组)或难以访问/修改数据(使用 的数组struct)。

于 2017-01-29T16:20:52.467 回答