set unique values in matrix for each column new to 0
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Frederik Reese
le 13 Juil 2022
Modifié(e) : Bruno Luong
le 13 Juil 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 commentaires
Réponse acceptée
Ruchika P Barman
le 13 Juil 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.
Plus de réponses (3)
Bruno Luong
le 13 Juil 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 commentaires
Bruno Luong
le 13 Juil 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 commentaires
Bruno Luong
le 13 Juil 2022
Modifié(e) : Bruno Luong
le 13 Juil 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 commentaires
Voir également
Catégories
En savoir plus sur Biological and Health Sciences dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!