【发布时间】:2016-11-24 20:42:41
【问题描述】:
假设我有以下两个变量:
start_idx = [1 4 7];
end_idx = [2 6 15];
我想有效地(如果可能,不要使用 for 循环)生成一行,其中包含在 start_idx 和 end_idx 的相应元素之间应用的冒号运算符。对于此示例,这将导致:
result = [1:2 4:6 7:15];
因此:
results = [1 2 4 5 6 7 8 9 10 11 12 13 14 15];
执行此操作的方法应该可以在 Simulink 的 MATLAB Function 模块中使用。非常感谢!
【问题讨论】:
-
out=cell2mat(arrayfun(@(x,y)[x:y],start_idx,end_idx,'uniformoutput',false)); -
arrayfun 比 for 循环快吗?
-
并非如此。你的
sart_idx和end_idx向量的大小是多少?我相信它们必须相当大,才能让这段代码对你的代码速度产生不可忽视的影响 -
您对其中一个答案的回复说您需要它来生成代码 - 您是指使用 Simulink Coder 吗?这将是包含在问题中的有用信息。但鉴于此操作的结果将是一个可变长度信号,您还必须设置 MATLAB Fcn 块以正确处理它。最后,恕我直言,在循环中执行此操作比寻找一些高度混淆的单列更清晰、更易于理解。
标签: matlab vectorization simulink