Make a matrix smaller based on some criteria
    9 次查看(过去 30 天)
  
       显示 更早的评论
    
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.
0 个评论
采纳的回答
  Md
 2014-1-2
        1 个评论
  Image Analyst
      
      
 2014-1-2
				I fixed it for you. For next time, read this : http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup
更多回答(1 个)
  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
      
      
 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
      
      
 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 Exchange 中查找有关 Performance and Memory 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

