我有一个排序的数组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循环,我无法弄清楚如何做到这一点。有没有人有其他选择?
答案 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
...
所在的最后一行。有很多方法可以做到这一点,我使用了1
和max
:
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
...
非常自我解释。