我们可以直接创建数组字段的结构吗?

时间:2016-10-12 18:56:07

标签: matlab

在MATLAB中,如果我们这样做

 struct('a',1:4) 

它创建了一个struct数组......我想要的是

 s = struct('a',[]);
 s.a = 1:4;

我们可以在一个命令中这样做吗?

1 个答案:

答案 0 :(得分:2)

如果你这样做

s.a = 1:4; 

Matlab自动创建一个结构,不需要第一行。

要在两个版本和erfan的版本之间获得性能差异(请参阅问题评论),请使用timeit

t1 = timeit(@no_preallocation);
t2 = timeit(@no_preallocation2);
t3 = timeit(@preallocation);

function no_preallocation()
    s.a = 1:4;
end

function no_preallocation2()
    s=struct('a',1:4);
end

function preallocation()
    s = struct('a',[]);
    s.a = 1:4;
end

我得到了

t1 = 1.3965e-06
t2 = 7.1217e-06
t3 = 7.1223e-06

表明直接分配的速度要快得多。

但是,请注意 NOT preallocating可能导致奇怪的行为,特别是在脚本中,因为在分配字段a之前,实际上并没有删除结构,这意味着如果你有{ {1}}在分配之前的内存中,您将保留它并简单地覆盖a,这可能不是预期的行为。所以Edric和erfan建议的预分配似乎是最好的。