在Matlab中进行矢量化范围检查

Kri*_*ris 3 arrays algorithm matlab vector vectorization

在尝试将算法从C#移植到Matlab时,我发现Matlab在运行循环时效率很低.因此我想要对算法进行矢量化.

我有以下输入:

低量程:

[ 00 10 20 30 40 50 ... ]
Run Code Online (Sandbox Code Playgroud)

高变速:

[ 10 20 30 40 50 60 ... ]
Run Code Online (Sandbox Code Playgroud)

这些数组的长度相等.

我现在有一个第三组Values(可以是任何长度),该阵列我要计数的出现Values之间的元素lowerange(i)highrange(i)(你可以看到我从未来的for循环).

输出应该是长度低范围/高范围的数组.

所以用上面的数组和输入LineData:

[ 1 2 3 4 6 11 12 16 31 34 45 ]
Run Code Online (Sandbox Code Playgroud)

我希望得到:

[ 05 03 00 02 01 00 ...  ]
Run Code Online (Sandbox Code Playgroud)

我试过(对我来说)显而易见的事情:

LineData(LineData < PixelEnd & LineData > PixelStart) 
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它只是按元素方式检查元素上的LineData.它不会尝试对所有值应用比较LineData.

不幸的是,由于我还没有习惯用Matlab的"向量"方式思考,所以我无法想出任何其他内容,更不用说从内存中了解所有适用的指令.

Nra*_*ras 5

当您想要使用给定边缘执行基本直方图时,您可以使用Matlabs内置函数histc:

values = [ 1 2 3 4 6 11 12 16 31 34 45 ];
edges = 0:10:60;
histc(values, edges)

ans =

 5     3     0     2     1     0     0
Run Code Online (Sandbox Code Playgroud)