Extract consecutive elements from a vector in a sliding manner
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
LH
el 30 de Abr. de 2025
Respondida: Walter Roberson
el 30 de Abr. de 2025
Hi all,
If I have a vector:
A = [1 ;2 ;3 ;4 ;5 ;6];
and I want to extract 2 elements in a way that I should get in each loop:
for i 1:size(A,1)
A_slice = [?];
end
The answer I'm looking for, for each loop I should get:
%Loop 1: A_slice=[1;2]
%Loop 2: A_slice=[3;4]
%Loop 3: A_slice=[5;6]
any help would be appreicted.
0 comentarios
Respuesta aceptada
Matt J
el 30 de Abr. de 2025
A = [1 ;2 ;3 ;4 ;5 ;6];
Ar=reshape(A,2,[]);
for i=1:size(Ar,2)
A_slice=Ar(:,i)
end
0 comentarios
Más respuestas (2)
dpb
el 30 de Abr. de 2025
Editada: dpb
el 30 de Abr. de 2025
Alternatively, depending upon end use, without the explicit loop can generate the subsets directly...
x=[1:6].';
n=2;
slice=arrayfun(@(i)x(i:i+n-1),1:n:numel(x)-1,'UniformOutput',false)
or, more succinctly
slice=num2cell(reshape(x,n,[]),1)
ADDENDUM: I see now that the latter above was already shown by @Matt J, I just recast into the cell array with generic number of elements. Of course, either fails if numel(x) isn't integer multiple of n.
0 comentarios
Walter Roberson
el 30 de Abr. de 2025
A = [1 ;2 ;3 ;4 ;5 ;6];
A_slice = buffer(A, 2)
now do things with the columns.
buffer() requires the Signal Processing Toolbox. (Personally, I think it ought to be made part of basic MATLAB.)
buffer() has the advantage of smoothly handling the case where the input vector is not an exact multiple of the buffer size.
0 comentarios
Ver también
Categorías
Más información sobre Image Data Workflows 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!