set unique values in matrix for each column new to 0
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Ruchika P Barman
2022 年 7 月 13 日
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.
その他の回答 (3 件)
Bruno Luong
2022 年 7 月 13 日
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 件のコメント
Bruno Luong
2022 年 7 月 13 日
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 件のコメント
Bruno Luong
2022 年 7 月 13 日
編集済み: Bruno Luong
2022 年 7 月 13 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Biological and Health Sciences についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!