【发布时间】:2014-09-26 08:28:15
【问题描述】:
在尝试将算法从 C# 移植到 Matlab 时,我发现 Matlab 在运行 for 循环时效率低下。因此,我想对算法进行矢量化。
我有以下输入:
低档:
[ 00 10 20 30 40 50 ... ]
远距离:
[ 10 20 30 40 50 60 ... ]
这些数组长度相等。
我现在有第三个数组Values(可以是任何长度),对于这个数组,我想计算Values 元素在lowerange(i) 和highrange(i) 之间的出现次数(你可以看到我来了来自 for 循环)。
输出应该是一个长度为低范围/高范围的数组。
所以用上面的数组输入LineData:
[ 1 2 3 4 6 11 12 16 31 34 45 ]
我希望得到:
[ 05 03 00 02 01 00 ... ]
我尝试了(对我而言)显而易见的事情:
LineData(LineData < PixelEnd & LineData > PixelStart)
但这不起作用,因为它只是逐个元素地检查元素上的 LineData。它不会尝试对LineData 中的所有值进行比较。
不幸的是,由于我还不习惯以 Matlab 的“向量”方式思考,所以我无法想出其他任何东西,更不用说从记忆中知道所有适用的指令了。
【问题讨论】:
-
如果
Values中的任何元素像10或20这样落在边界上怎么办?另外,lowrange和highrange的元素之间的间隔是否相同,即给定数据中的10。 -
@Divakar 好点...我的数据是由物理过程生成的,因此可能会发生某些事情正好落在边界上。但是,我认为其中一个答案中建议的命中会为此类事件提供规定(但实际上,我需要检查它们是什么)。另一方面,是的,间隔将始终保持不变。
标签: arrays algorithm matlab vector vectorization