我想在一个循环中创建一个结构,但是我第一次分配有问题。为了解决这个问题,我做了以下工作,但是我正在寻找更好,更有效的解决方案。
for i = 1:n
if i == 1
myStruct = myFunction(i);
else
myStruct(i) = myFunction(i):
end
end
但是我更喜欢一些简短的解决方案。我感谢任何建议。
为此,使用arrayfun更有效。如果myFunction始终返回具有相同成员的结构,请尝试:
myStruct = arrayfun(@myFunction, 1:n);
编辑以进行澄清:
在每次迭代中添加时,每次迭代都会更改数组的维数。这不是有效的。 Arrayfun允许Matlab预分配struct数组并为您管理值分配。
function [t1,t2] = testFun()
tic;
v = arrayfun(@myfun, 1:10000);
t1 = toc;
tic;
a = myfun(1);
for i = 2:10000
a(i) = myfun(i);
end
t2 = toc;
end
function s = myfun(x)
s = [];
s.Val = x;
s.ValS = int2str(x);
end
结果:t1 = 0.2083t2 = 1.8614