Finding integers between two vectors

1 view (last 30 days)
hi
im new in the matlab world
i have 2 vectors A and B size (1xM)
i need to find all the integers betwwen corresponding Columns and store the integers in cell arry
for example:
A= 4.54 5.11 9.58 15.04
B= 1.01 3.2 5.5 16.98
i need to create cell arry X that each column contains all the integers between the numbers in A and B columns (1.01-4.54 the integers 2,3,4 3.2-5.11 the integers 4,5... )
X=
2 4 6 16
3 5 7
4 8
9
how can i do it?
thanks

Accepted Answer

John Doe
John Doe on 1 Sep 2013
A= [4.54 5.11 9.58 15.04];
B= [1.01 3.2 5.5 16.98];
C = sort([A; B]);
C(1,:) = ceil(C(1,:));
C(2,:) = floor(C(2,:));
temp = diff(C) + 1;
D = zeros(max(temp),size(C,2));
for ii = 1:size(C,2)
D(1:temp(ii),ii) = C(1,ii):C(2,ii);
end
  3 Comments
the cyclist
the cyclist on 2 Sep 2013
Edited: the cyclist on 2 Sep 2013
@david, I expect you realize this, since you accepted the answer, but this solution has two features that are different from what you specified in your question:
  • It is a numeric array, not a cell array.
  • It includes extra zeros.
Maybe that doesn't matter to you, but just in case another person tries to use this solution, it is good to realize.
the cyclist
the cyclist on 2 Sep 2013
@david, I suggest you ask your second question as a brand-new one, rather than as a comment here. You will get more "traffic" seeing it.

Sign in to comment.

More Answers (1)

the cyclist
the cyclist on 1 Sep 2013
Edited: the cyclist on 1 Sep 2013
Here is a slick one-liner:
arrayfun(@(x,y) (ceil(min([x y])):floor(max([x,y])))',A,B,'UniformOutput',false)
Here is a straightforward way with a loop:
A = [4.54 5.11 9.58 15.04];
B = [1.01 3.2 5.5 16.98];
N = length(A);
X = cell(1,length(A));
for i = 1:N
hi = floor(max([A(i) B(i)]));
lo = ceil(min([A(i) B(i)]));
X{i} = (lo:hi)';
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!