在循环中创建结构的最佳方法是什么?

问题描述 投票:0回答:1

我想在一个循环中创建一个结构,但是我第一次分配有问题。为了解决这个问题,我做了以下工作,但是我正在寻找更好,更有效的解决方案。

for i = 1:n
     if i == 1
         myStruct = myFunction(i);
     else
         myStruct(i) = myFunction(i):
     end
 end

但是我更喜欢一些简短的解决方案。我感谢任何建议。

matlab indexing struct
1个回答
1
投票

为此,使用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

© www.soinside.com 2019 - 2024. All rights reserved.