Borrar filtros
Borrar filtros

Sum nX2 matrix

4 visualizaciones (últimos 30 días)
Gudmund Hjelmqvist
Gudmund Hjelmqvist el 3 de Nov. de 2015
Respondida: Stephen23 el 6 de Nov. de 2015
Hi
I'm new to matlab. I want to sum elements in a matrix nx2
1 132
1 8989
2 898
2 9898
2 89898
3 90909
3 90909
In my matrix first column is Var1 and second Var2 I want to sum all elements with the same Var1 and create a matrix 12*1 where all elements Var1=x are summed togehter.

Respuesta aceptada

Tushar Sinha
Tushar Sinha el 5 de Nov. de 2015
Hi Gudmund,
Let's call the matrix, M. Let's find all the entries in column 2, corresponding to the value of 1 in column 1. You can use logical indexing ( to do that as illustrated below:
>> M(M(:,1)==1,2)
ans =
132
8989
The above command gives you all the entries in the second column corresponding to an entry of 1 in the first. Hence, you can pass the output as an argument to the "sum" command,
>> sum(M(M(:,1)==1,2))
ans =
9121
If you want to repeat this for all the values in Var1(i.e. 1,2 and 3) then you can make use of MATLAB for-loop like this:
for i = 1:3
sum1(i,1) = sum(M(M(:,1)==i,2));
end
Refer to the following documentation for logical indexing:
I hope this helps!
Thanks,
Tushar
  1 comentario
Gudmund Hjelmqvist
Gudmund Hjelmqvist el 5 de Nov. de 2015
Thank you! This was what I as looking for!

Iniciar sesión para comentar.

Más respuestas (1)

Stephen23
Stephen23 el 6 de Nov. de 2015
Although there is already an accepted answer to this question, the accepted answer misses the much simpler and neater alternative accumarray, which does not require any loops:
>> M = [1,132;1,8989;2,898;2,9898;2,89898;3,90909;3,90909]
M =
1 132
1 8989
2 898
2 9898
2 89898
3 90909
3 90909
>> S = accumarray(M(:,1),M(:,2))
S =
9121
100694
181818

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by