Coping cell array but skipping a specific column

조회 수: 5 (최근 30일)
ErikaZ
ErikaZ 2018년 7월 4일
답변: ErikaZ 2018년 7월 5일
I have:
EMG =
1×3 cell array
{3×16 cell} {3×15 cell} {3×15 cell}
I need to copy the "first" 10 columns of each cell but for each iteration I need to skip column 1, for the second iteration column 2, for the third iteration column 3, and so on. The resulting cell array (3x30) needs to be:
Skipping first column
column1, column2, column3, column4, column5, column6 column28, column29, column30
column2ofcell1, column2ofcell2, column2ofcell3, column3ofcell1,column3ofcell2, column3ofcell3column11ofcell1, column11ofcell2, column11ofcell3
Skipping second column
column1, column2, column3, column4, column5, column6 column28, column29, column30
column1ofcell1, column1ofcell2, column1ofcell3, column3ofcell1, column3ofcell2, column3ofcell3column11ofcell1, column11ofcell2, column11ofcell3
where the column of each cell is copied.
I put the word first in quotations because the columns to be extracted are not contiguous, so it is not always 1:10, the fist iteration is 2:11 because I need to skip #1, on the second iteration I need to skip #2 so I need to copy, 1&3:11, for the third iteration I need to skip #3 and copy 1:2&4:11 and so on until I skip the first 10 columns.
Thank you,

채택된 답변

ErikaZ
ErikaZ 2018년 7월 5일
Not the best code but it works
for cv=1:10
%Create cell array with train data
EMG_InputSeries = []; Angle_TargetSeries = []; Angle_Moment_TargetSeries = [];
EMG_InputSeries=cellfun(@(x) x(:,1:11),EMG,'uni', false);
Angle_TargetSeries=cellfun(@(x) x(:,1:11),Angle,'uni', false);
Angle_Moment_TargetSeries=cellfun(@(x) x(:,1:11),Angle_Moment,'uni', false);
%Delete Test column
for i=1:numel(EMG_InputSeries)
EMG_InputSeries{i}(:,cv)=[];
Angle_TargetSeries{i}(:,cv)=[];
Angle_Moment_TargetSeries{i}(:,cv)=[];
end
%Organize as walk,up,down,walk,up,down
EMG_InputSeries= reshape(vertcat(EMG_InputSeries{:}), [3 30]);
Angle_TargetSeries= reshape(vertcat(Angle_TargetSeries{:}), [1 30]);
Angle_Moment_TargetSeries= reshape(vertcat(Angle_Moment_TargetSeries{:}), [1 30]);
end

추가 답변 (1개)

Image Analyst
Image Analyst 2018년 7월 4일
Each of your cells in your cell array contains another cell array. We don't know what that cell array's cells contain but it doesn't matter. To extract/crop out the first 10 columns of the contained cell array, simply do
for k = 1 : length(ca)
thisCellsContents = ca{k}; % This is another cell array
% Take the first 10 columns of the cell array called "thisCellsContents"
ca{k} = thisCellsContents(:, 1:10);
end
Now I have no idea what you mean by iterations. Do you want to put that "crop first 10 columns" code into a for loop where you iterate it for some reason?
  댓글 수: 2
ErikaZ
ErikaZ 2018년 7월 5일
I put the word first in quotations because the columns to be extracted are not contiguous, so it is not always 1:10, the fist iteration is 2:11 because I need to skip #1, on the second iteration I need to skip #2 so I need to copy, 1&3:11, for the third iteration I need to skip #3 and copy 1:2&4:11 and so on until I skip the first 10 columns.
Image Analyst
Image Analyst 2018년 7월 5일
Why do you need to do this?
And please attach your varaible in a .mat file so we can do something with it.

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

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by