creating multiple variables from a vector

2 ビュー (過去 30 日間)
shobhit mehrotra
shobhit mehrotra 2014 年 8 月 20 日
編集済み: Andrei Bobrov 2014 年 8 月 21 日
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....]

採用された回答

Geoff Hayes
Geoff Hayes 2014 年 8 月 20 日
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!
  1 件のコメント
shobhit mehrotra
shobhit mehrotra 2014 年 8 月 21 日
Worked thank you!

サインインしてコメントする。

その他の回答 (2 件)

Guillaume
Guillaume 2014 年 8 月 20 日
編集済み: Guillaume 2014 年 8 月 20 日
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 2014 年 8 月 20 日
編集済み: Andrei Bobrov 2014 年 8 月 21 日
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})

カテゴリ

Find more on Loops and Conditional Statements in Help Center and File Exchange

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by