Filter löschen
Filter löschen

How to apply arrayfun on a 3D matrix?

10 Ansichten (letzte 30 Tage)
Mark Golberg
Mark Golberg am 25 Jul. 2017
Kommentiert: Mark Golberg am 1 Aug. 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 Kommentar
Adam
Adam am 25 Jul. 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 25 Jul. 2017
Bearbeitet: Stephen23 am 25 Jul. 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 Kommentare
Adam
Adam am 25 Jul. 2017
Bearbeitet: Adam am 25 Jul. 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 am 1 Aug. 2017
Thanks guys.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by