if loop that is not working properly, row should be deleted based on several criterias but do not
1 回表示 (過去 30 日間)
古いコメントを表示
hi,
I have a matrix with 8 columns and I would like to delete those rows where the value of column 8 exceeds 1.1 or is below 0.9 and apply a similar criteria on column 5, here is the respective code:
while i < size(data8, 1)
i = i + 1 ;
if(data8(i,8)>1.1)
data8(i,:) = [];
elseif(data8(i,8)<0.9)
data8(i,:) = [];
elseif(data8(i,5)<5*1/365)
data8(i,:) = [];
elseif(data8(i,5)>120*1/365)
data8(i,:) = [];
end
end
although the code is running, I get in the resulting matrix values in column 8 that exceeds 1.1 and are below 0.9, whan do I need to change?
0 件のコメント
採用された回答
Image Analyst
2013 年 4 月 13 日
Try it this way
rowsToDelete = data(:,8) > 1.1 | data(:,8) < 0.9;
data(rowsToDelete, :) = [];
Do the same for column #5. You could combine column 5 into the calculation of rowsToDelete if you want.
2 件のコメント
Image Analyst
2013 年 4 月 13 日
No. The code was all there was. The whole point of vectorizing it was to get rid of the while loop - and you put it back in. Don't use it. Try this, which I constructed to use sample data in the rang 0.8 - 1.2.
% Create array of numbers between 0.8 and 1.2.
data = .8 + .4 * rand(20,8)
% Display rows 8 and 5
data(:,8)
data(:,5)
% Find the rows to delete.
rowsToDelete8 = data(:,8) > 1.1 | data(:,8) < 0.9
rowsToDelete5 = data(:,5) > 1.1 | data(:,5) < 0.9
rowsToDelete = rowsToDelete8 & rowsToDelete5
% Go ahead and delete them.
data(rowsToDelete, :) = [];
% Display final data.
data
その他の回答 (1 件)
Locks
2013 年 4 月 13 日
3 件のコメント
Image Analyst
2013 年 4 月 13 日
編集済み: Image Analyst
2013 年 4 月 13 日
That's correct. If we're done, then mark my answer (not yours) as Accepted.
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!