Checking repetition of random data
3 views (last 30 days)
I heed your help please. I made a random data for example T1 = randn (1000,1); T2= randn (1000,1); .... T100=randn (1000,1); and I want check whether there is any repetition for T's if so then remove it. How can I do that ?? Thanks in advance :)
Jan on 4 Jan 2018
Edited: Jan on 8 Jan 2018
Do not create a list of variables called T1, T2, ... See https://www.mathworks.com/matlabcentral/answers/57445-faq-how-can-i-create-variables-a1-a2-a10-in-a-loop. Use a cell or multidimensional array instead.
I assume your problem is to have no repeated values inside each vector and between all vectors. Then you need 1000*100 different random numbers at first:
ready = false;
Pool = rand(1, 100000);
ready = (length(unique(Pool)) == length(Pool));
T = reshape(Pool, 1000, 100);
Maybe this is faster:
ready = all(diff(sort(Pool)));
[EDITED] If all you want is to create a unique set of vectors, and randn was just an example to create test data for the forum:
[T, Idx] = unique(T, 'rows')
[EDITED] And for unique columns:
T = unique(T.', 'rows').'
More Answers (2)
Birdman on 4 Jan 2018
Firstly, generate random data as follows:
Secondly, as Adam said, use unique function to check repetitions.
stable command helps to protect the initial order of values.
John BG on 5 Jan 2018
this is John BG <mailto:email@example.com firstname.lastname@example.org>
so far, the supplied answers increase the probability to generate all-different, random Ts.
Each of the answers improves generation randomness, yet if you really want to make sure that all T sequences are different, once generated, let's say you don't really have control on the randomness of the data and the the suggested randn(1000,1) is you model, then there's no other way than comparing them by pairs.
Let be N the amount of T sequences
then all possible pairs of T sequences are
As Jan Simon mentions, sometimes it's more practical to put all data in a structure that can be indexed, instead of working with N different sequence names.
Let be T all your input Ti sequences compiled into a single matrix
8 2 3 9 3
3 5 8 10 9
7 10 3 6 3
7 4 6 2 9
2 6 7 2 3
Checking there are no 2 equal sequences
Removing repeated sequences
T(D(:,1),:)=; % removing one of the repeated identical pairs
Ahmed, I have overwritten some sequences on purpose, so the counter D shows spotted repeated sequences and these simple lines remove all repetition without losing data (when more than one repetition of same given sequence) and it works.
If you find this answer useful would you please be so kind to consider marking my answer as Accepted Answer?
To any other reader, if you find this answer useful please consider clicking on the thumbs-up vote link
thanks in advance for time and attention