How to select columns based on a known repeated pattern.

조회 수: 2(최근 30일)
Matt
Matt 2013년 12월 5일
답변: Andrei Bobrov 2013년 12월 5일
I have data that came from excel and I want to grab the data without all the comments. I have imported the data into matlab but now I am having trouble selecting it cleanly. If the data is in a variable called raw I do the following.
data = raw(:,28:22:end);
data = [data, raw(:,29:22:end)];
data = [data, raw(:,30:22:end)];
data = [data, raw(:,31:22:end)];
data = [data, rwa(:,32:22:end)];
The problem with this is I have to reorder everything afterwards to get the columns back in the right order. I want to select all the columns like:
data = raw(:,[28:32]:22:end);
or something similiar. I figure there must be some ultra fancy vector way of doing this in 1 shot.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2013년 12월 5일
data = raw(:,bsxfun(@plus,29:32,22*(0:floor((size(raw,2)-32)/22))'));

추가 답변(2개)

the cyclist
the cyclist 2013년 12월 5일
One marginally better possibility:
data = raw(:, [28:22:end 29:22:end 30:22:end 31:22:end 32:22:end]);

Kelly Kearney
Kelly Kearney 2013년 12월 5일
Not quite one shot, but a little less typing:
n = size(raw, 2);
idx = bsxfun(@plus, (1:22:n)', 28:32);
idx = idx(idx <= n);
data = raw(:,idx);
  댓글 수: 1
Matt
Matt 2013년 12월 5일
2 minor things but this is good.
idx = bsxfun(@plus, (1:22:n)', 27:31);
idx = sort(idx(idx <= n)); % sorts the columns in the right order

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by