MATLAB Answers

getting rid of a loop

2 views (last 30 days)
joseph Frank
joseph Frank on 25 Jul 2012
Hi,
I have a cell array X which has around 1 million rows. each row has a 1x18 cell in it. I want to select columns 4,5,10,18 from each row. To do so I am running a loop v = regexp( X, ',', 'split'); ncol=[4 5 10 18];%numeric columns v2=nan(length(v),length(ncol));% numeric variables empty matrix
for j=1:length(v)
v0=[v{j,1}];
v2(j,1:length(ncol))=str2double(v0(1,ncol));
end
end
is it possible to avoid the loop and select columns 4,5,10,18 of each row of X?

  1 Comment

Image Analyst
Image Analyst on 26 Jul 2012
Edit your question. Highlight the code part of the question. Click the "{} Code" box above to format it so that it looks like a regular program.

Sign in to comment.

Answers (2)

Nirmal
Nirmal on 25 Jul 2012
Edited: Nirmal on 25 Jul 2012
b=[V(:,4) V(:,5) V(:,10) V(:,18)]
b will be what you want.

  2 Comments

joseph Frank
joseph Frank on 25 Jul 2012
No,
It is giving an error that index exceeds Matrix dimenssions.
V has only one column and in each row of this column I have 1x18 cells
Nirmal
Nirmal on 25 Jul 2012
change that V with X. I misread.

Sign in to comment.


joseph Frank
joseph Frank on 26 Jul 2012
Edited: joseph Frank on 26 Jul 2012
Thanks Nirmal for your efforts but still it doesn't work. Just in case my question wasn't clear I will rephrase it here
X has the following format:is 00846UAB7,A.GB,A,07/01/2002,11:10:26,T,500000,101.84,2.21429,000,@,,,101.84,2.21429,101.84,2.21429,101.84 v = regexp( X, ',', 'split');
to obtain v=
<1x18 cell>
... for 1 million rows.
I want a matrix v2 that consists of columns 4 ,5,10 and 18 without running a loop/ I used in my initial codes v2=str2double(v0(1,ncol)); where v0 is a row obtained as :
for j=1:length(v)
v0=[v{j,1}];
v2(j,1:length(ncol))=str2double(v0(1,ncol));
end
end
from the loop descibed in the intial post;

  0 Comments

Sign in to comment.