在试图将算法从C#移植到Matlab时,我发现Matlab在运行for循环时效率低下。因此,我想要矢量化算法。在Matlab中向量化范围检查
我有下列输入:
lowrange:
[ 00 10 20 30 40 50 ... ]
高变速:
[ 10 20 30 40 50 60 ... ]
这些阵列在长度上相等。
我现在有第三阵列Values
(可以是任何长度),该阵列我想算lowerange(i)
和highrange(i)
之间Values
元素的出现(你可以看到我从未来的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 2014-09-26 08:31:26
@Divakar好点......我的数据是通过物理过程生成的,因此可能发生某些东西完全落在边界上。但是,我认为其中一个答案中提出的命中可能会有这样一个事件的规定(但事实上,我需要检查它们是什么)。另一方面,是的,间隔总是不变的。 – Kris 2014-09-26 08:53:31