Ste*_*fin 4 performance matlab struct cell identifier
我想以下列方式存储一些结果:
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;
Run Code Online (Sandbox Code Playgroud)
我想使用0到3000之间的数字,但我只会使用大约100-300.是否可以使用0作为标识符,或者我必须使用最小值1?(这些数字有意义,所以我更愿意,如果我不需要改变它们).我可以在结构中使用数字作为标识符吗?
我知道我可以做到以下几点:
Res{(last number + 1)} = magic(4);
Res{2} = magic(5);
Res{7} = magic(6);
Res{2000} = 1:3;
Run Code Online (Sandbox Code Playgroud)
请记住,最后一个元素实际上是"数字零"元素.
在这种情况下,我将[]在非填充位置创建一堆空单元格元素.这会导致问题吗?我假设最好先分配最后一个元素,以避免创建一个增长的单元格,或者这不会产生影响?这是一种有效的方法吗?
哪个最有效率,struct是或哪个cell?(如果可以使用struct's,那就是).
我主要担心的是计算效率.
谢谢!
让我们来看看你的选择:
如果你想在存储单元阵列数据,在最坏的情况下,你总是可以使用MATLAB标从指数开始1,而不是从0 k + 1到索引对应于小区ķ个标识符(ķ ≥0).在我看来,使用最后一个元素作为"基本案例"更加令人困惑.所以你将拥有的是:
Res{1} = magic(4); %// Base case
Res{2} = magic(5); %// Corresponds to identifier 1
...
Res{k + 1} = ... %// Corresponds to indentifier k
Run Code Online (Sandbox Code Playgroud)
结构中的字段名称不允许以数字开头,但允许它们从第二个字符开始包含它们.因此,您可以像这样构建您的结构:
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...
Run Code Online (Sandbox Code Playgroud)
您可以使用动态字段引用来访问任何字段,例如:
k = 3;
kth_field = Res.(sprintf('c%d', k)); %// Access field k = 3 (i.e field 'c3')
Run Code Online (Sandbox Code Playgroud)
我不能说哪种替代方案看起来更优雅,但我相信索引到单元格应该比动态字段引用更快(但欢迎你检查一下并证明我错了).