Looping for finding dominating points.
7 次查看(过去 30 天)
显示 更早的评论
Hi,
I have a matrix with 'n' rows and two columns, say,
f(1,1) f(1,2)
f(2,1) f(2,2)
f(3,1) f(3,2)
f(4,1) f(4,2)
............
f(n,1) f(n,2)
I would like to remove dominating row or rows, and record non-dominating rows as a data file. It would be much appreciated if any one can help me with coding to do that.
Thanks in advance.
Rizvi
采纳的回答
Roger Stafford
2014-8-30
Mohammed Rizvi, in a forum of this nature you really ought to carefully define a concept such as "dominating points" so as to avoid causing an excess of guessing at what you mean.
I will guess that you mean by a "dominating point", a point in a given 2D set for which a straight line can be drawn that separates that point from all other points in the set. If that is what you mean, you could call on 'convhull'. Call your n x 2 matrix f.
K = convhull(f(:,1),f(:,2),'simplify',true);
f(K,:) = [];
This should strip away all "dominating points" of f.
You used the term "looping" in your subject title. I would warn that removing dominating points one at a time can result, if not done properly, in removing too many points, as remaining points that weren't previously dominating points suddenly become dominating ones. It is much better to use a function like 'convhull' which does the job simultaneously (so to speak.)
更多回答(1 个)
Image Analyst
2014-8-30
Try this:
% Define rows to remove:
% However they're determined....I don't know, presumably you do.
% For this demo, let's assume you've identified the rows
% and the row numbers are entered into an array.
dominatingRows = [2,3,42,69,123]; % For example...
% Now, remove the dominating rows:
f(dominatingRows, :) = [];
2 个评论
Image Analyst
2014-8-31
Now it's clear - would have been great to have given that definition in your original post. Try this:
rows = 30; % Whatever you want.
columns = 3; % Whatever you want.
f = rand(rows, columns) % Create sample data.
df = diff(f) % Calc diff between each row and one below it.
% Find where all 3 differences are positive.
dominatingRows = sum(df>0, 2) == size(df, 2)
% Extract only the non-dominating rows.
out = f(~dominatingRows,:)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!