How to apply arrayfun on a 3D matrix?

8 ビュー (過去 30 日間)
Mark Golberg
Mark Golberg 2017 年 7 月 25 日
コメント済み: Mark Golberg 2017 年 8 月 1 日
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 件のコメント
Adam
Adam 2017 年 7 月 25 日
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.

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2017 年 7 月 25 日
編集済み: Stephen23 2017 年 7 月 25 日
"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 件のコメント
Adam
Adam 2017 年 7 月 25 日
編集済み: Adam 2017 年 7 月 25 日
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 2017 年 8 月 1 日
Thanks guys.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by