how to compare two values that are repeated in two vectors?

6 views (last 30 days)
Hello everyone, I'm new to matlab, I wanted to know how I can compare 2 values that are repeated between two vectors, I'll explain myself better, for example I have these two vectors.
A = [10 56 34 11 34 ];
B = [10 56 34 11 ];
Now I need to compare element by element, I mean...
vector B = [(10) 56 34 11]; element 10 is repeated in vector A? No then it is assigned the number 1.
vector B = [10 (56) 34 11 ]; element 56 is repeated in vector A? No then it is assigned the number 1.
vector B = [10 56 (34) 11 ]; element 34 is repeated in vector A? Yes! then it is assigned the number 0.
vector B = [10 56 34 (11) ]; element 34 is repeated in vector A? Yes! then it is assigned the number 1.
the result has to be an array, equal to this.
result= [10 1
56 1
34 0
11 1]
any help will be very helpful.
  2 Comments
Image Analyst
Image Analyst on 2 Jun 2022
Edited: Image Analyst on 2 Jun 2022
What if the numbers are not in the same index in the two vectors, like
A = [10 56 34 11 34 ];
B = [11 10 56 34 5 ];
are the 10, 56, and 34 repeated in B? What's your definition of repeated?
And is this your homework (sounds like it)?
giancarlo maldonado cardenas
Maybe I expressed myself in the wrong way!
I meant for example in the vector B = [10 56 (34) 11 ]; in vector A element 34 is repeated twice? Yes! then it is assigned the number 0.
then all the other values of B are not repeated twice in A so it is assigned the label 1, the only value of B repeated twice in A is the value 34, therefore it is assigned the label 0.

Sign in to comment.

Accepted Answer

Voss
Voss on 2 Jun 2022
Edited: Voss on 2 Jun 2022
A = [10 56 34 11 34 ];
B = [10 56 34 11 ];
result = [B.' sum(A==B.',2)<=1]
result = 4×2
10 1 56 1 34 0 11 1
Breaking that expression down:
A==B.' % compare each element of A to every element of B
ans = 4×5 logical array
1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0
sum(A==B.',2) % sum each row to get the number of occurrences in A of each element of B
ans = 4×1
1 1 2 1
sum(A==B.',2)<=1 % if the number of occurrences is NOT 2 or more, that's a 1 in the result, otherwise a 0
ans = 4×1 logical array
1 1 0 1
  2 Comments
giancarlo maldonado cardenas
Edited: giancarlo maldonado cardenas on 6 Jun 2022
is there a way to do it with a for loop, and not altogether?
I have to compare each element of vector B and traverse vector A in search of if that element is repeated twice, then an IF condition, if label 0 is repeated, if label 1 is not repeated, but this label can also be 0 with a probability of 10%. this is my code when comparing repeated elements in a single vector.
can u help me?
Voss
Voss on 5 Jun 2022
Edited: Voss on 5 Jun 2022
I don't understand what you mean by "if label 0 is repeated, if label 1 is not repeated, but this label can also be 0 with a probability of 10%", but here is how you can perform the task from the original question using a for loop:
A = [10 56 34 11 34 ];
B = [10 56 34 11 ];
result = [B.' zeros(numel(B),1)];
for ii = 1:numel(B)
result(ii,2) = nnz(A==B(ii))<=1;
end
disp(result);
10 1 56 1 34 0 11 1
Maybe that can be of use in your actual task.

Sign in to comment.

More Answers (0)

Categories

Find more on LTE Toolbox in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!