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
Best Answer