gpt4 book ai didi

performance - 在 Matlab 中使用非连续整数作为单元格或结构中的标识符

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

我想用以下方式存储一些结果:

Res.0 = magic(4);      % or Res.baseCase = magic(4);
Res.2 = magic(5); % I would prefer to use integers on all other
Res.7 = magic(6); % elements than the first.
Res.2000 = 1:3;

我想使用 0 到 3000 之间的数字,但我只会使用其中的大约 100-300 个。是否可以使用 0 作为标识符,或者我必须使用最小值 1? (数字有意义,所以如果我不需要更改它们,我会更愿意)。我可以在结构中使用数字作为标识符吗?

我知道我可以做到以下几点:

Res{(last number + 1)} = magic(4);    
Res{2} = magic(5);
Res{7} = magic(6);
Res{2000} = 1:3;

请记住,最后一个元素实际上是“数字零”元素。

在这种情况下,我将在未填充的位置创建一堆空单元格元素[]。这会导致问题吗?我认为最好先分配最后一个元素,以避免创建不断增长的单元格,或者这没有效果吗?这是一种有效的方法吗?

哪个最有效,struct 还是 cell? (如果可以使用 struct,那就是)。

我主要关心的是计算效率。

谢谢!

最佳答案

让我们回顾一下您的选择:

索引到元胞数组

MATLAB 索引从 1 开始,而不是从 0 开始。如果您想将数据存储在元胞数组中,在最坏的情况下,您总是可以使用下标 k + 1 来索引对应的元胞到第 k 个标识符(k ≥ 0)。在我看来,使用最后一个元素作为“基本案例”更容易混淆。所以你将拥有的是:

Res{1} = magic(4);                   %// Base case
Res{2} = magic(5); %// Corresponds to identifier 1
...
Res{k + 1} = ... %// Corresponds to indentifier k

访问结构中的字段

结构中的字段名不允许以数字开头,但允许从第二个字符开始包含它们。因此,您可以像这样构建您的结构:

Res.c0 = magic(4);                   %// Base case
Res.c1 = magic(5); %// Corresponds to identifier 1
Res.c2 = magic(6); %// Corresponds to identifier 2
%// And so on...

您可以使用 dynamic field referencing访问任何字段,例如:

k = 3;
kth_field = Res.(sprintf('c%d', k)); %// Access field k = 3 (i.e field 'c3')

我不能说哪个替代方案看起来更优雅,但我相信索引到单元格应该比动态字段引用更快(但欢迎您检查并证明我错了)。

关于performance - 在 Matlab 中使用非连续整数作为单元格或结构中的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895097/

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