Make a matrix smaller based on some criteria

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.

更多回答(1 个)

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 个评论

Thanks for your quick response. I think, if the difference of the values are within 2, then delete the column that corresponds to the smaller value in the second row.
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.
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

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Performance and Memory 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by