【发布时间】:2011-09-13 16:53:53
【问题描述】:
我有一个带有正/负信号和零(无信号)的向量:
X=[0,0,1,1,1,1,0,0,-1,-1,0,0,0,1,1,1,0,0,-1,0];
我想创建一个新向量,它是X 的累积和,条件是累积和永远不会超过 3/-3,因此输出变为:
Y=[0,0,1,2,3,3,3,3,2,1,1,1,1,2,3,3,3,3,2,2];
我可以通过循环或arrayfun 来解决这个问题,但我的矩阵尺寸很大且是多维的,而且这些解决方案都不能很好地扩展。
我的问题可以通过矢量化解决方案解决吗?谢谢。
【问题讨论】:
-
从根本上说,没有向量化的解决方案,因为每个结果元素都依赖于前一个。
-
@Oli 是的,我想你是对的。只是想检查一下,有时当我被卡住时,我会在这里感到非常惊讶。谢谢。
-
您对问题的描述可以很容易地向量化,但从您的示例看来,您想要一些稍微不同的东西。 temp = cumsum(y);Y=max(min(3,temp),-3)。如果这行不通,而您确实需要更快的速度,那么这是一个非常适合 mex 文件实现的问题。
-
@MatlabSorter Ehhhm,您的建议实际上并没有产生我想要的向量作为最终结果,因为
cumsum独立于最小/最大条件工作。如果您有任何其他潜在的解决方案,请提供它们作为可能的答案。编译代码可能是要走的路,但我仍处于试错/分析模式,现在不想走那条路。谢谢 -
@OliCharlesworth:你应该把你的评论放在答案中,把这个问题标记为已解决