Non-Sorted nx1 unique values
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello, i am attempting to find repeated values in an nx1 matrix, the catch is that the unique function sorts the data. The data should not be sorted. Ideally i would like the output from my mystery function to be 1 for not repeated and 0 for repeated. Any suggestions?!
input: [1;1;1;2;3;4;5;6;6;7] output:[1;0;0;1;1;1;1;1;0;1]
the idea is that i can multiply the output and the original matrix where the data resides so that duplicate records will show as 0 values, but the first stays!
Thanks again! If you would like me to post another question please let me know!
댓글 수: 2
Image Analyst
2016년 12월 19일
Give a short example of your input and desired output. Why don't you just use unique and histogram(). Are your data integers or floating point values?
채택된 답변
Roger Stafford
2016년 12월 19일
Let x be the given n by 1 vector.
[y,p] = sort(x);
d = diff(y)~=0;
b = [d;true] & [true;d];
b(p) = b;
Then b will be your "ideal" desired result.
댓글 수: 8
Roger Stafford
2016년 12월 21일
@Jan. In William’s original request he states:, “the idea is that i can multiply the output and the original matrix where the data resides so that duplicate records will show as 0 values, but the first stays!” To be able to do such a multiplication (presumably elementwise) the final reordering by “b(p) = b” would be very necessary.
Jan
2017년 1월 16일
@Roger: I meant "The data should not be sorted." Anyway, both methods are included in your solution.
추가 답변 (1개)
John BG
2016년 12월 19일
편집: John BG
2016년 12월 19일
but this code seems to work with any randomly generated sequence.
If it works for noise it works for any deterministic signal, oder?
N=20;
A=randi([-10 10],1,N);
% nA=[1:1:numel(A)]
A
[B,reloc]=sort(A)
% dB=diff(B)
% B(find(dB~=0))
nv=0;
k=1
while k<=numel(B)-1
k=k+1
u0=B(k-1);u1=B(k);
if u0==u1
nv=[nv k]
k=k+1
while B(k-1)==B(k);
k=k+1
end
end
end
nv(1)=[]
B(nv)
for certain sequences there is an overflow message
Index exceeds matrix dimensions.
Error in find_long_bursts (line 17)
while B(k-1)==B(k);
don't worry, sequence
nv
contains the right indices and therefore
B(bv)
is ok.
Just had to do something else, I am cleaning it if Mr Honjas likes the code :) .
if you John BG's answer useful would you please mark it as Accepted Answer?
To any other reader, please if you find this answer of any help, click on the thumbs-up vote link,
thanks in advance for time and attention
John BG
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!