using sum() with a vector and increment
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Isabella Kratzer
el 11 de Abr. de 2018
Respondida: Isabella Kratzer
el 11 de Abr. de 2018
Hi peeps, sorry about this rather simple question; I'm very new to this and cannot wrap my head around it. Dummy-Code:
A= [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15]; %create 3x5 matrix
a = [2 3 4]; %row vector
b = A(1,:); %extract row 1 from Matrix A
c= b(a+1); %create vector from positions+1 defined with a
d=[1 c]; %create vector with 1 and positions
dsum=sum(A(1,d:d+1),1); %??????
Why does d:d+1 give me the first two positions of row 1 (and 2 and 3 if I change it so A(2,d:d+1))? I understand that : can be used to create vectors with certain increments, but it simply makes no sense to me. I'm sure there is a logical explanation. Anybody? Help is greatly appreciated.
0 comentarios
Respuesta aceptada
Jan
el 11 de Abr. de 2018
Editada: Jan
el 11 de Abr. de 2018
The colon operator ":" needs scalars as input. Then operation "vector:vector" is not defined. Unfortunately Matlab does not stop with an error, if you provide vectors as input, but only the first element is used.
v = [7,8,9]
v:v+1 % This is the same as: 7:7+1
% The rest of v is ignored
In your case only the first element 1 is used, such that "d:d+1" is the same as "1:2".
This behavior is a typical source of unexpected behavior in:
for k = 1:size(v)
when size(v,2) or numel(v) is meant.
1 comentario
Guillaume
el 11 de Abr. de 2018
Then operation "vector:vector" is not defined
If you specify nonscalar arrays, then MATLAB interprets j:i:k as j(1):i(1):k(1).
However, yes, it would probably make more sense if matlab simply errored.
Más respuestas (1)
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices 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!