function for cell array

7 views (last 30 days)
Oskar Kilgus
Oskar Kilgus on 28 Jul 2022
Edited: Jon on 2 Aug 2022
Hi folks,
i´ve got a cell array with vectors of data type double in every cell. Now i want to apply a function to every single cell. I found the command cellfun(func,A) to be useful.
Nonetheless i dont know how to implement a function func to do what i want on every part of the cell array. In particular i dont get how to tell the function that the vectors of doubles in the cells of A are the input arguments.
I´m thankful for any advice!

Accepted Answer

Jon
Jon on 28 Jul 2022
Here's a simple example
% Make an example cell array with a vector in each cell
A = cell(2,3); % preallocate
for i = 1:2
for j = 1:3
A{i,j} = rand(4,1);
end
end
A
A = 2×3 cell array
{4×1 double} {4×1 double} {4×1 double} {4×1 double} {4×1 double} {4×1 double}
% Now use cellfun to compute the sum of the elements in each vector
B = cellfun(@(x) sum(x),A)
B = 2×3
1.8600 1.9744 2.3527 2.2433 2.3225 2.4160
  3 Comments
Oskar Kilgus
Oskar Kilgus on 2 Aug 2022
Thanks for the initial help Jon,
i guess the problem i´m dealing with is more about the function itself.
I´ve got a cell array with wave-data in every cell and want to apply the pitch function to it.
As mentioned above im struggling with the input for pitch. Lets take ur example:
% Make an example cell array with a vector in each cell
A = cell(2,3); % preallocate
for i = 1:2
for j = 1:3
A{i,j} = rand(4,1);
end
end
A
A = 2×3 cell array
{4×1 double} {4×1 double} {4×1 double} {4×1 double} {4×1 double} {4×1 double}
The idea is now to do the following:
f0_A = cellfun(pitch(???),A)
I cant figure out how to tell the pitch function what the right input arguments are..
Thanks in advance!
Jon
Jon on 2 Aug 2022
Edited: Jon on 2 Aug 2022
I am not familiar with the "pitch" function, and it does not seem to be in my MATLAB R2022A, or any of my toolboxes. Maybe you have the Audio Toolbox? I see looking online that there is a pitch function in that toolbox https://www.mathworks.com/help/audio/ref/pitch.html#mw_cb9b23c6-9dfa-4f98-8596-743e701e5fb8. Assuming this is the function you are using and you have already defined the variable fs in your workspace, you could do something like:
f0_A = cellfun(@(x) pitch(x,fs),A)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!