Maximizing along n-1 dimensions of an n-dimensional array without a for loop
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have an n-dimensional array, VV, which I would like to maximize along all dimensions for each element in the first dimension. I would also like to obtain the associated linear indices so that I can evaluate related arrays at those locations. I have to do this a large amount of times, so I need to figure out a way to do this without a for loop.
Here is an example for an n=3 dimensional array, but with a loop:
VV=rand(10,10,10);
for ii=1:size(VV,1)
Vtemp = squeeze(VV(ii,:,:));
[V(ii) I(ii)] = max(Vtemp(:));
end
[~,ind] = ismember(V,VV);
Any help would be appreciated.
0 comentarios
Respuesta aceptada
Jan
el 12 de Oct. de 2021
Editada: Jan
el 12 de Oct. de 2021
VV = rand(8, 9, 10);
for ii = 1:size(VV,1)
Vtemp = squeeze(VV(ii, :, :));
[V(ii), I(ii)] = max(Vtemp(:));
end
[~,ind] = ismember(V, VV);
ind
s = size(VV, 1);
W = reshape(VV, s, []);
[maxV, Index] = max(W, [], 2);
ind2 = sub2ind(size(W), 1:s, Index.')
Más respuestas (1)
Steven Lord
el 12 de Oct. de 2021
VV=randi(1000, 5, 5, 5);
[values, locations] = max(VV, [], 1:ndims(VV)-1, 'linear');
check = [reshape(values, [], 1), reshape(VV(locations), [], 1)]
1 comentario
Jan
el 13 de Oct. de 2021
Thanks for pointing to the new 'linear' output. It was introduced in R2019a.
Ver también
Categorías
Más información sobre Elementary Math 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!