creating multiple variables from a vector

5 views (last 30 days)
i have a vector [185 186 188 189 192 247 248 249 250 251 252 253 254 255 625 626....] i want to group all of terms that are within 15 numbers apart together. for example vector1 = [185 186 188 189 192] vector2= [247 248 249 250 251 252 253 254 255] vectorn = [625 626....]

Accepted Answer

Geoff Hayes
Geoff Hayes on 20 Aug 2014
Shobhit - rather than creating multiple variables (which is possible but gets messy), why not just create a cell array of these vectors instead? That way you have all of the vector data within one array.
% create the vector of data to break apart
V = [185 186 188 189 192 247 248 249 250 251 252 253 254 255 625 626];
% sort the data in ascending order
V = sort(V);
% create the data vector cell array
data = {};
k = 1;
% continue looping until all elements have been split into vectors
while true
% find the index of the first element that is 15 larger than the first V(1)
idx = find(V>V(1)+15,1);
if ~isempty(idx)
% extract the elements
data{k} = V(1:idx-1);
% reset V, removing those that have been extracted
V = V(idx:end);
% increment to the next k
k = k + 1;
else
% else there is no element in V that is 15 larger, so all remaining
% elements are together
data{k} = V(1:end);
% break out of loop
break;
end
end
Try the above and see what happens!

More Answers (2)

Guillaume
Guillaume on 20 Aug 2014
Edited: Guillaume on 20 Aug 2014
An alternative way of doing this:
[~, binnumber] = histc(V, min(V):15:max(V)+15);
vector = cell(1, max(binnumber)); %optional
for bin = 1:max(binnumber)
vector{bin} = V(find(binnumber == bin));
end

Andrei Bobrov
Andrei Bobrov on 20 Aug 2014
Edited: Andrei Bobrov on 21 Aug 2014
EDIT
a = [185 186 188 189 192 247 248 249 250 251 252 253 254 255 625 626] ;
m = ceil(max(a))+1;
k = min(a):15:m;
k(end) = m;
[~,ii] = histc(a,k);
ii = cumsum([1;diff(ii(:))~=0]); % OR [~,~,ii] = unique(ii);
out = accumarray(ii(:),a(:),[],@(x){x})

Tags

Products

Community Treasure Hunt

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

Start Hunting!