Matlab - Suma de elementos de un vector por partes

 
Vista:

Suma de elementos de un vector por partes

Publicado por Adrian (3 intervenciones) el 09/11/2016 17:51:21
Hola... lo que necesito hacer, es realizar la suma acumulativa de un vector pero dividiéndolo en partes, y que estas sumas se almacenen en otro vector. Por ejemplo:

Tengo un vector A de tamaño 12

A=[1 3 5 2 0 6 8 9 0 1 5 6]

Y quiero que dividirlo en un vector de tamaño 4, entonces realizo la suma cada 3 elementos, almacenándolo en otro vector, es decir,
1+3+5=9 .... 2+0+6=8 ... 8+9+0=17 .... 1+5+6=12

B=[9 8 17 12]

Se puede hacer de forma automática ? ? ya que el vector que necesito modelar es de largo 8000.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Suma de elementos de un vector por partes

Publicado por Adrian (3 intervenciones) el 09/11/2016 18:39:55
Excelente ! ! Gracias :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Suma de elementos de un vector por partes

Publicado por Daniel (264 intervenciones) el 09/11/2016 20:51:23
Aquí tengo otra forma alternativa a la de José un poco mas compacta (lo cual es extraño porque José generalmente encuentra la mejor forma de hacerlo):

1
2
3
A=[1 3 5 2 0 6 8 9 0 1 5 6];
k=3; % toma de a k elementos
B=sum(reshape(A(1:(end-rem(numel(A),k))),k,floor(numel(A)/k)),1);

Ten en cuenta de que si el vector no es fraccionable entero de a cada k elementos, tendrás que decidir como proceder y escribir un código afín.

Este código toma en este caso de a tres (k=3) y si tubieses un vector de 10 elementos tomaría sólo hasta el noveno...


Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Suma de elementos de un vector por partes

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/11/2016 21:04:57
Si había pensado en eso Daniel. Pero nose cual es el conocimiento del usuario. De Repente el objetivo del usuario es aprender usar ciclos repetitivos. Por eso hice de una forma elemental y entendible para el usuario que pregunta.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Suma de elementos de un vector por partes

Publicado por Guillem (8 intervenciones) el 27/11/2017 17:48:41
Hola,

Mi pregunta es parecida a la anterior.

Yo tengo un vector con valores igual a cero y valores superiores

A=[0 0 2 4 0 0 0 5 8];

Me gustaría obter un vector que agrupara los valores distintos a cero consecutivos y los sumara. Deteniendo el sumatorio cada vez que encontrase otro cero. Y empezando otro nuevo al encontrar otro valor distinto a cero. En este caso debería obtener:

B=[6 13]; %Siendo 6=2+4 y 13=5+8

He intentado con diferentes concatenaciones de bucles if y for, pero no me sale. Podrian ayudarme.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Suma de elementos de un vector por partes

Publicado por Daniel (264 intervenciones) el 27/11/2017 18:06:42
Podrías hacer algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
A=[0 0 2 4 0 0 0 5 8];
B=zeros(size(A));
 
k=1;
for j=1:numel(A)
    if A(j)==0
        k=k+1;
    end
    B(k)=B(k)+A(j);
end
 
B(B==0)=[];
disp(B)

Seguramente hay mejores de hacerlo pero esto anda

Comentanos como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma de elementos de un vector por partes

Publicado por Guillem (8 intervenciones) el 27/11/2017 18:35:56
Hola Daniel,

Parece que funciona perfectamente.

Además, me abre la puerta a aprender nuevas maneras de usar el for. Ya que en la solución que me proporcionas, la variable "k" no se encuentra en el enunciado del "for" ni del "if" y en cambio, se usa para realizar los cálculos. Cosa que creo no había hecho hasta ahora y que estaba siendo el principal impedimento a la hora de solucionar mi duda.

Una duda que me genera tu respuesta sería: Es imprescindible usar "numel"? Substituyéndolo por "length" también funciona.

Muchas gracias por todo.

Guillem
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma de elementos de un vector por partes

Publicado por HUGO (3 intervenciones) el 11/12/2018 04:38:22
Hola que tal

quisiera que me apoyen... bueno tengo un vector

T=[0.56 0.23 0.14 0.25 0.36 0.21 0.38 0. 78 ]

y quiero obtener la sumatoria de cada uno de sus elementos y almacenarlo en otro vector
por ejemplo

TT=[(0.56) (0.56+0.23) (0.56+0.23+0.14) (0.56+0.23+0.14+0.36) (0.56+0.23+0.14+0.36+0.21)... ]

y asi sucesivamente...

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Suma de elementos de un vector por partes

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 11/12/2018 21:31:56
1
2
3
4
5
6
7
8
9
10
11
T=[0.56 0.23 0.14 0.25 0.36 0.21 0.38 0. 78 ]
 
T =
 
    0.5600    0.2300    0.1400    0.2500    0.3600    0.2100    0.3800         0   78.0000
 
>> A=cumsum(T)
 
A =
 
    0.5600    0.7900    0.9300    1.1800    1.5400    1.7500    2.1300    2.1300   80.1300
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar