How to apply arrayfun on a 3D matrix?

6 visualizaciones (últimos 30 días)
Mark Golberg
Mark Golberg el 25 de Jul. de 2017
Comentada: Mark Golberg el 1 de Ag. de 2017
Hello,
I have the following matrix:
size(A) = [64 64 1000];
I'd like to apply the following function on each frame, along the 3rd dimension.
lasca_func = @(x)(mean2(x)/std2(x));
How can I do this via arrayfun, and not through for-loop?
Thanks in advance!
  1 comentario
Adam
Adam el 25 de Jul. de 2017
I don't think arrayfun can be used for that - it takes the array values in turn as linear indices so the structure of the array is not preserved and the function will be applied per element for the whole 64*64*1000.

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 25 de Jul. de 2017
Editada: Stephen23 el 25 de Jul. de 2017
"How can I do this via arrayfun, and not through for-loop?"
You can't, because arrayfun operates on each element of an array. You cannot tell it to operate along specific dimensions of an array. An alternative would be to split the array into a cell array and then call cellfun, but this would be slower than using a preallocated loop.
Unless you have a gpuArray the simplest solution is to use mean and std, and specify the dimension:
>> A = rand(64,64,1000);
>> Z = mean(A,3)./std(A,0,3);
>> size(Z)
ans =
64 64
  2 comentarios
Adam
Adam el 25 de Jul. de 2017
Editada: Adam el 25 de Jul. de 2017
As I understood the question the result should be a 1x1000 result though with the mean/std calculation over each 64*64 matrix.
I was thinking something similar to this, but while it works for mean you can't do this for standard deviation as it doesn't give correct results:
mean( mean( a, 1 ), 2 ) ./ std( std( a, [], 1 ), [], 2 )
Mark Golberg
Mark Golberg el 1 de Ag. de 2017
Thanks guys.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by