在MATLAB中,如果我们这样做
struct('a',1:4)
它创建了一个struct数组......我想要的是
s = struct('a',[]);
s.a = 1:4;
我们可以在一个命令中这样做吗?
答案 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建议的预分配似乎是最好的。