Removing repeated numbers in a matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
AA
am 23 Aug. 2020
Kommentiert: Bruno Luong
am 23 Aug. 2020
Ex: In a matrix
A = [9 9 1 1 2 2 2 2 2 0 3 3; 7 7 4 4 4 5 5 6 6 6 6 6 ; 8 8 7 7 7 8 8 8 9 9 9 5]
, i want to eliminate all repeating elements and retain non-repeating elements
i.e. from the above example
A = [9 1 2 0 3 ; 7 4 5 6 ; 8 7 8 9 5]
To prevent a dimensions error because of different output results, the remaining entries on the left can be filled by zero like here
A = [9 1 2 0 3 ; 7 4 5 6 0 ; 8 7 8 9 5]
0 Kommentare
Akzeptierte Antwort
Stephen23
am 23 Aug. 2020
Bearbeitet: Stephen23
am 23 Aug. 2020
>> A = [9,9,1,1,2,2,2,2,2,0,3,3;7,7,4,4,4,5,5,6,6,6,6,6;8,8,7,7,7,8,8,8,9,9,9,5]
A =
9 9 1 1 2 2 2 2 2 0 3 3
7 7 4 4 4 5 5 6 6 6 6 6
8 8 7 7 7 8 8 8 9 9 9 5
>> X = diff(A(:,[1,1:end]),1,2)~=0;
>> X(:,1) = true;
>> S = size(A);
>> [R,~] = ndgrid(1:S(1),1:S(2));
>> C = cumsum(+X,2);
Method one: accumarray:
>> B = accumarray([R(:),C(:)],A(:),[],@mode,0)
B =
9 1 2 0 3
7 4 5 6 0
8 7 8 9 5
Method two: indexing:
>> B = zeros(S(1),max(C(:)));
>> B(sub2ind(S,R,C)) = A
B =
9 1 2 0 3
7 4 5 6 0
8 7 8 9 5
0 Kommentare
Weitere Antworten (1)
KSSV
am 23 Aug. 2020
Bearbeitet: KSSV
am 23 Aug. 2020
A = [9 9 1 1 2 2 2 2 2 0 3 3; 7 7 4 4 4 5 5 6 6 6 6 6 ; 8 8 7 7 7 8 8 8 9 9 9 5] ;
[m,n] = size(A) ;
C = cell(m,1) ;
for i = 1:m
C{i} = unique(A(i,:)) ;
end
L = cellfun(@length,C) ;
B = zeros(m,max(L)) ;
for i = 1:m
B(i,1:L(i)) = C{i} ;
end
4 Kommentare
Stephen23
am 23 Aug. 2020
Bearbeitet: Stephen23
am 23 Aug. 2020
"Easy to fix with 'stable' option"
Nope, not fixed. Lets try it:
>> c = arrayfun(@(r) unique(A(r,:),'stable'), 1:size(A,1), 'unif', 0);
>> n = max(cellfun(@length,c));
>> B = cell2mat(cellfun(@(x) [x,zeros(1,n-length(x))], c, 'unif', 0)')
B =
9 1 2 0 3
7 4 5 6 0
8 7 9 5 0
Note that the last row differs from the expected output given in the original question:
9 1 2 0 3
7 4 5 6 0
8 7 8 9 5
Siehe auch
Kategorien
Mehr zu GPU Computing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!