How to use svd in cellfun?

Hello,
I'd like to use svd in cellfun. Imagine a multidimensional cell like this:
inst = cell(1, 3, 5, 2);
inst(:,:,1,1) =
[308x21 double] [308x21 double] [308x21 double]
Each element of inst is a 308*21 double. Now I'd like to apply SVD on each element of inst to extract the singular values, so I write this:
instsvd = cellfun(svd, inst, 'UniformOutput', false);
MATLAB gives me error:
Error using svd
Not enough input arguments.
Any idea how to solve this?
Many thanks!

 Respuesta aceptada

Adam
Adam el 5 de En. de 2017
Editada: Adam el 5 de En. de 2017

0 votos

instsvd = cellfun(@(x) svd(x), inst, 'UniformOutput', false);
The first argument to cellfun should be a function handle, you are passing the name of a function instead, with no arguments. The above should work and is using an anonymous function where 'x' is a placeholder for each of the elements of your cell array in turn.

3 comentarios

Steven Lord
Steven Lord el 5 de En. de 2017
FYI for this case you could simplify the code just a little bit by using a regular function handle to svd rather than creating an anonymous function.
instsvd = cellfun(@svd, inst, 'UniformOutput', false);
Xh Du
Xh Du el 5 de En. de 2017
Wow, thanks!
Adam
Adam el 5 de En. de 2017
Ah, yes, I keep forgetting that, I'm so used to just wrapping things in anonymous functions!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

el 5 de En. de 2017

Comentada:

el 5 de En. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by