set unique values in matrix for each column new to 0
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Frederik Reese
il 13 Lug 2022
Modificato: Bruno Luong
il 13 Lug 2022
Hi,
I want to set the dublicate values to zero:
The problem with this code is that it sets all duplicate values to 0, even across columns. I want the duplicate values to be removed only per column E.g. the error in my code:
0 0 0
0 0 1
1 0 2
2 1 3
2 2 4
2 2 4
is going to
0 0 0
0 0 0
1 0 0
2 0 3
0 0 4
0 0 0
I want
0 0 0
0 0 1
1 0 2
2 1 3
0 2 4
0 0 0
DOK_HQ10000_FD_zeitlich_neu= zeros(size(DOK_HQ10000_FD_zeitlich))
[~,pos] = unique(DOK_HQ10000_FD_zeitlich,'first')
DOK_HQ10000_FD_zeitlich_neu(pos)=DOK_HQ10000_FD_zeitlich(pos)
0 Commenti
Risposta accettata
Ruchika P Barman
il 13 Lug 2022
It is my understanding that you are trying to set the duplicate values to zero considering the elements columnwise in the matrix.
M = [0 0 0 ; 0 0 1; 1 0 2 ; 2 1 3 ; 2 2 4 ; 2 2 4]
ans1=[];
[~,col]=size(M);
for c=1:col
x=(M(:,c))';
y = [x(1) diff(x)];
y = find(y==0);
z = x;
z(y)=0;
ans1 = [ans1;z];
end
ans1=ans1'
This should solve your problem, thank you.
Più risposte (3)
Bruno Luong
il 13 Lug 2022
It looks like your repeated elemenst are adjacent
M = [0 0 0 ; 0 0 1; 1 0 2 ; 2 1 3 ; 2 2 4 ; 2 2 4]
M.*(diff([nan(size(M(1,:))); M],1,1)~=0)
0 Commenti
Bruno Luong
il 13 Lug 2022
This works for repeated elements that are in any order in the columns
M = randi(4,10,3)
[m,n]=size(M);
IJ = cell(n,1);
v = cell(n,1);
for j=1:n
[v{j},IJ{j}] = unique(M(:,j),'stable');
IJ{j}(:,2)=j;
end
accumarray(cat(1,IJ{:}), cat(1,v{:}), [m,n])
0 Commenti
Bruno Luong
il 13 Lug 2022
Modificato: Bruno Luong
il 13 Lug 2022
Another solution without assum^tion of M is sorted by column
M = randi(4,10,3)
[m,n]=size(M);
[S,i] = sort(M);
M(i+(0:n-1)*m) = S.*~~[true(1,n);diff(S)]
0 Commenti
Vedere anche
Categorie
Scopri di più su Biological and Health Sciences in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!