【发布时间】:2015-10-29 09:56:18
【问题描述】:
假设我们有一个结构数组:
S=repmat(struct('a1',0,'a2', 0, 'a3', 0, ...), N, 1 );
我需要将具有特定字段值的所有元素(例如字段 a1 = k)更改为具有该字段另一个值的元素(例如字段 a1 = m)。换句话说,如果S(i).a1 == k => S(i).a1 = m。而且我需要做得非常快,所以没有适合我的循环。我试图找到一个解决方案,这就是我发现的。命令:
S([S.a1]==k)
返回一个数组,其中包含字段 a1 等于 k 的所有元素。但是,如果我在这个数组中改变一些东西,当然,初始数组 S 不会发生任何事情。所以我尝试做明显的移动:
S([S.a1]==k).a1 = m
很遗憾,MATLAB 不明白这一点:
Insufficient outputs from right hand side to satisfy comma separated list expansion on left hand side. Missing [] are the most likely cause.
(我试图将括号放在任何地方 - 没有帮助)
有没有什么方法可以在没有循环的情况下做到这一点(理想情况下,它应该尽可能快地工作)?可能是structfun 之类的东西?
提前致谢。
【问题讨论】:
-
哈哈,好像你没有成功把括号到处放... :-)
-
顺便说一下,
structfun比for循环更糟糕,因为它无论如何都是一个伪装 循环,并且您通过为每个元素调用一个函数来执行这些操作-- MATLAB 中的函数调用很昂贵。 -
@CST-Link 谢谢。 :)