How can I find and remove the nonzero duplicates in each column of a matrix
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
X is a n-by-n matrix of integers ranging from 0 to n. I want to find nonzero duplicate entries in each column and remove them.
댓글 수: 2
  Image Analyst
      
      
 2016년 7월 4일
				
      편집: Image Analyst
      
      
 2016년 7월 4일
  
			Unless there is exactly the same number of elements to remove in each column, you can't. For example, you can't "remove" 3 elements from column 1 and 8 elements from column 2. Can you give an example of input and output and how you used unique() to try to solve it?
채택된 답변
  per isakson
      
      
 2016년 7월 6일
        
      편집: per isakson
      
      
 2016년 7월 6일
  
      Given
- "matrix of integers"
- "the first row is always the column number"
- "the duplicate, if exists, is always the same integer as the column number"
Try this
X = [ 1 2 3 4 5
      2 9 5 3 8
      7 5 4 0 1
      6 7 3 2 0
      3 1 6 7 9 ];
Y = nan( size(X) );
for jj = 1 : size( X, 2)
    isdub = X( :, jj ) == jj;
    if  any( isdub(2:end) ) 
        col = X(:,jj);
        col( isdub ) = [];
        Y(:,jj) = cat( 1, col, zeros(sum(isdub),1) );
    else
        Y(:,jj) = X(:,jj);
    end
end
result
>> Y
Y =
     1     2     5     4     5
     2     9     4     3     8
     7     5     6     0     1
     6     7     0     2     0
     3     1     0     7     9
>>
This code trades performance for readability.
 
Requirement of comment: "modify the codes ... keep the one in the first row and only remove the other one"
Y = nan( size(X) );
for jj = 1 : size( X, 2)
    col = X(2:end,jj);
    isdub = col == jj;
    if  any( isdub ) 
        col( isdub ) = [];
        Y(:,jj) = cat( 1, jj, col, zeros(sum(isdub),1) );
    else
        Y(:,jj) = X(:,jj);
    end
end
result
>> Y
Y =
     1     2     3     4     5
     2     9     5     3     8
     7     5     4     0     1
     6     7     6     2     0
     3     1     0     7     9
추가 답변 (0개)
참고 항목
카테고리
				Help Center 및 File Exchange에서 Cell Arrays에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


