在linspace值之间找到数组的元素

时间:2016-03-15 08:02:33

标签: matlab vectorization

我有一个排序的数组A,范围在0到1之间,数组B = linspace(0,1,21)。

我想找到A的元素,这些元素位于由B定义的连续区间之间。例如:

A= [ 0.001 0.002 0.003 0.006];
B= [0 0.05 0.1 ....1];

我想找到

C = [1 2 3; 4];

因为A的前三个元素介于0和0.005之间,而第四个元素介于0.005和1之间。

如果没有for循环,我无法弄清楚如何做到这一点。有没有人有其他选择?

1 个答案:

答案 0 :(得分:4)

C = [1 2 3; 4];不是有效的MATLAB结构。您可以C = {1 2 3; 4};但我建议可能更C = [1,1,1,2],其中C中的数字代表最大元素的B中的位置,该位置小于{的相应元素{1}}。

A

然后

A= [ 0.01 0.02 0.03 0.06];
B= linspace(0,1,21);

我们使用C = max(cumsum(bsxfun(@gt,A,B'))) 来比较bsxfun B元素的哪些元素大于:

A

现在我们只需找到每列bsxfun(@gt, A, B') ans = 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 所在的最后一行。有很多方法可以做到这一点,我使用了1max

cumsum

我认为cumsum(bsxfun(@gt, A, B')) ans = 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 ... 非常自我解释。