Error using arrayfun : Non scalar in Uniform output

Hello,
I have a cell array (Z) of size (480*1) where in each row I have the individual double arrays that I want(e.g. 1*70 double). Now I want to apply a custom function to each row (each elements of the cell), for this I use arrayfun:
C = arrayfun(@ (x) (((a/length(Z))*(1/(2*pi))).*((abs(fftshift(fft(Z,1024))).^2))),1:480);
and I get this error:
Error using arrayfun Non-scalar in Uniform output, at index 1, output 1. Set 'UniformOutput' to false.
(Worth mentioning that I zeropad my fft, so the output data are all the same size(1*1024))

Answers (1)

Add 'uniformoutput',false or 'un',0
C = arrayfun(@ (x) (((a/length(Z))*(1/(2*pi))).*((abs(fftshift(fft(Z,1024))).^2))),1:480,'un',0);

4 Comments

Thanks for your answer, but it shouldn't be the problem of output size since all outputs do to use of zeropadding must be of size 1*1024. With your correction the error will be:
Undefined function 'fft' for input arguments of type 'cell'.
Error in @(x)(((a/length(Z))*(1/(2*pi))).*((abs(fftshift(fft(Z,1024))).^2)))
Change fft(Z,1024) by fft(x,1024)
C = arrayfun(@ (x) (((a/length(Z))*(1/(2*pi))).*((abs(fftshift(fft(x,1024))).^2))),1:480,'un',0);
x in your expression is 1:480, while fft is going to be applied on each element of Z(as explained in my question) i.e. Z{1} which has 1*70 elements , then Z{2} having 1*58 elements,...
Ok, then use cellfun
C = cellfun(@ (x) (((a/length(Z))*(1/(2*pi))).*((abs(fftshift(fft(x,1024))).^2))),Z,'uniformoutput',false);

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!