gpt4 book ai didi

matlab - MATLAB 中结构的高效索引

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:17 24 4
gpt4 key购买 nike

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

Structure.fieldA(1) = 23423

因此,该结构有一组字段,每个字段都是一个向量。

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

Structure(1).fieldA

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

最佳答案

每个字段都是数组的 struct 性能更高,因为您的数据元素更少(每个字段一个数组),而 struct 数组具有更高的灵 active ,但代价是性能和内存使用情况(每个字段的每个 struct 元素)。

来自MATLAB自己的documentation

Structures require a similar amount of overhead per field. Structures with many fields and small contents have a large overhead and should be avoided. A large array of structures with numeric scalar fields requires much more memory than a structure with fields containing large numeric arrays.

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

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 数组提供的一些灵 active 包括能够轻松获取数据的子集:

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 的数组)。

关于matlab - MATLAB 中结构的高效索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41923010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com