Make a matrix smaller based on some criteria

3 ビュー (過去 30 日間)
Md
Md 2014 年 1 月 2 日
編集済み: Image Analyst 2014 年 1 月 2 日
I am working with a matrix.
A=[...
20 40 21.5 41
5 21 15 10]
Now, first of all, I want to find out the similar values from row 1. Lets say, the similar values are 20 and 21.5, another pair is 40 and 41. For the each pair, I want to eliminate one column from each pair based on their corresponding column value in the second row. So, I want to eliminate
41
10
and
20
5
because its value in the second row is smaller. The final matrix that I want is
21.5 40
15 21
Thanks in Advance.

採用された回答

Md
Md 2014 年 1 月 2 日
row 1 is 20 40 21.5 41 and second row is 5 21 15 10

その他の回答 (1 件)

Image Analyst
Image Analyst 2014 年 1 月 2 日
You'll need to specify how close is close enough to be removed. Is it 1 away? 0.5 away? 2 away? Then I'd start scanning columns, and if any column is too close to another one, delete it:
% Delete column 42:
A(:,42) = [];
  3 件のコメント
Image Analyst
Image Analyst 2014 年 1 月 2 日
OK, I think the algorithm should work. Just make sure you use a while instead of a for because the array will be shrinking as your scan along and you need to take that into account. Post your code if you have trouble.
Image Analyst
Image Analyst 2014 年 1 月 2 日
編集済み: Image Analyst 2014 年 1 月 2 日
See if this works for you:
rows = 2;
columns = 40;
A = randi(99, rows, columns) % 2 by 40 matrix of values from 1-99.
tooClose = 2;
column = 1;
lastColumn = columns;
while column < lastColumn
% Find difference between current column and all the other columns.
differences = abs(A(1,:) - A(1, column));
% Find out which ones are too close and need to be deleted.
columnsToDelete = find(differences <= tooClose);
if length(columnsToDelete) > 1
% Don't delete the last one.
columnsToDelete = columnsToDelete(1:end-1);
% Now delete those columns
A(:, columnsToDelete) = [];
% Get new size.
[rows, lastColumn] = size(A);
end
% Increment column we're looking at
column = column + 1;
end
% Report final version of A to the command window.
A

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by