Counting specific element in one column corresponding to unique elements in an another column

1 visualización (últimos 30 días)
I have two vectors a and b. I want to count how many times the value '-1' appears in b corresponding to unique elements in a. Is there an efficient way to do this without loops?
a = [1,1,1,1,1,2,2,2,2,2,3,3,4,4,4,5,5,5,5,5,5]';
b = [1,1,-1,1,-1,-1,-1,-1,1,1,-1,1,1,-1,-1,1,1,-1,-1,1,1]';
desired output:
1--2
2--3
3--1
4--2
5--2

Respuesta aceptada

Jakob B. Nielsen
Jakob B. Nielsen el 20 de Feb. de 2020
You can use logic indexing. Example:
length(b(a==1 & b==-1));
You get those entries from b which fulfils the condition that the corresponding index position in a must equal 1, and also that the same index position in b must equal -1.
& is logic AND - both conditions must be true to get an output. If you need a logic OR, the matlab operator is |
  3 comentarios
Jakob B. Nielsen
Jakob B. Nielsen el 20 de Feb. de 2020
Other than manual work, you probably wont get out of a loop entirely. But it is a very simple one;
%where N is your highest integer of a that you want the comparison for;
N=5;
for i=1:N
output(i)=length(b(a==i & b==-1));
end
Stephen23
Stephen23 el 20 de Feb. de 2020
Editada: Stephen23 el 20 de Feb. de 2020
"Other than manual work, you probably wont get out of a loop entirely"
Basic MATLAB functions like histc don't require a loop.

Iniciar sesión para comentar.

Más respuestas (1)

Stephen23
Stephen23 el 20 de Feb. de 2020
>> a = [1;1;1;1;1;2;2;2;2;2;3;3;4;4;4;5;5;5;5;5;5];
>> b = [1;1;-1;1;-1;-1;-1;-1;1;1;-1;1;1;-1;-1;1;1;-1;-1;1;1];
>> u = unique(a);
>> n = histc(a(b==-1),u);
>> m = [u,n]
m =
1 2
2 3
3 1
4 2
5 2

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by