所以我有这些数据:
A=
2
4
8
9
4
6
1
3
和3区间
B=
1 4
5 8
9 12
如何制作这样的输出
Output=
1
1
2
3
1
2
1
1
输出基于间隔
答案 0 :(得分:0)
你可以通过多种方式解决它。例如,使用arrayfun
:
A = [2 4 8 9 4 6 1 3].';
B = [1 4;
5 8;
9 12];
res = arrayfun(@(x) find((x >= B(:,1)) & (x <= B(:,2))),A);
答案 1 :(得分:0)
如果间隔始终具有相同的长度(如案例4中所示),则可以按如下方式解决:
Output=ceil(A/4);
如果不是这种情况,并且如果并非所有数字都必须介于任何间隔之间,则可以按如下方式计算。如果数字不在任何间隔内,则输出零。
% example entry
A=[2 3 4 8 9 4 6 1 3]';
B=[1 4;5 7;9 12]';
Arep=A(:,ones(size(B,2),1)); % replicate array (alternatively use repmat)
Alog=Arep>=B(1,:)&Arep<=B(2,:); % conditional statements, make logical array
Output=Alog*(1:size(B,2))'; % matrix product with natural array to obtain indices