Operations along the first dimension of a 3D array

3 visualizaciones (últimos 30 días)
f10w
f10w el 29 de Mayo de 2014
Editada: Matt J el 29 de Mayo de 2014
I have a 3D array M(d*d,m,n). For each d*d vector of M (i.e. vectors of the first dimension), I split it into d parts and take the sum of each part to form a new vector (of size d). For example, if u is a vector along the first dimension of M, then it will be replaced by the vector v, computed by:
v = sum(reshape(u,d,d))';
For the moment I use a loop as following, but I think there should be a much faster way to do it.
N = zeros(d,m,n)
for i=1:m
for j=1:n
N(:,i,j) = sum(reshape(M(:,i,j),d,d))';
end
end
Thank you so much for any suggestions!

Respuesta aceptada

Matt J
Matt J el 29 de Mayo de 2014
Editada: Matt J el 29 de Mayo de 2014
Looks like M should have been a 4D array from the beginning,
M=reshape(M,d,d,m,n);
N=sum(M,2);
  1 comentario
Matt J
Matt J el 29 de Mayo de 2014
Editada: Matt J el 29 de Mayo de 2014
Khue Commented:
Thanks. But N=sum(M,2) will give a 4D array, right? I got this answer:
N = squeeze(sum(reshape(M,d,d,m,n)))
The idea is the same as yours.
Thanks again.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing 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