如何在不使用matlab中的for循环的情况下更改结构的某些特定字段?

时间:2015-06-15 17:19:17

标签: matlab structure field

让我们假设,我们有一个结构,并希望在不使用昂贵的for循环的情况下更改某些所需索引中的相同字段。 任何人都可以提出解决方案吗?

一个例子:

让我们假设我们有一个名为student的结构,我们想要改变字段' average' (如果没有#125,没有#231,没有#245,没有#256等等)必要时。然后据我所知,我们应该写如下:

should2change = [125, 231, 245, 256, ....];

for i = 1:numel(should2change)

   student(should2change(i,1)).average = student(should2change(i,1)).average + 1;

end

是否有一种直接的方法可以避免在执行完全相同的任务时使用这种昂贵的for循环?

1 个答案:

答案 0 :(得分:0)

据我所知,如果你不知道你将提前访问哪些元素,那么就没有一种非常好的方法来绕过for循环。但是,如果你真的想要,你可以做所谓的循环展开,你可以将指令写出x次,而不是执行for循环x次。因此,例如,如果您知道should2change(此处为s2c)总是有5个项目,您可以这样做:

student(s2c(1,1).average = s2c(1,1).avg+1
student(s2c(2,1).average = s2c(2,1).avg+1
student(s2c(3,1).average = s2c(3,1).avg+1
student(s2c(4,1).average = s2c(4,1).avg+1
student(s2c(5,1).average = s2c(5,1).avg+1

也许这可以并行化,但除非它真的会提升性能,否则我不会担心。

我认为这不是你想要的,在这种情况下,for循环可能是最好的。但是对于matlab而言,循环并不是太昂贵。你真正开始担心的唯一一次是你是否开始为循环嵌套(总是一个坏主意。)