What does @m and m(:) signify here?

24 views (last 30 days)
Siddharth Behal
Siddharth Behal on 27 Oct 2021
Commented: Jaya on 27 Oct 2021
cell2mat(cellfun(@(m)m(:),a,'uni',0))

Answers (2)

Star Strider
Star Strider on 27 Oct 2021
Correctly stated ‘@(m)’ is a function handle (see What is a Function Handle? for details) and the ‘m(:)’ forces the argument ‘m’ to be a column vector (see MATLAB Operators and Special Characters for those details), and since ‘m’ is obviously a cell array (that can contain anything, however here appears to be numeric) —
a = {randi(9, 1, 5)} % Cell Row Vector
a = 1×1 cell array
{[2 4 3 7 7]}
out = cell2mat(cellfun(@(m)m(:),a,'uni',0)) % Array Column Vector Result
out = 5×1
2 4 3 7 7
Experiment to get diferent results.
.
  1 Comment
Jaya
Jaya on 27 Oct 2021
Ah yes, function handle! I just forgot the word and was trying to explain in my own terms.

Sign in to comment.


Jaya
Jaya on 27 Oct 2021
Edited: Jaya on 27 Oct 2021
From what I know, @(m) specifies a function that which will be defined in terms of m. And what the function does i.e. the function description is m(:). The a is the data structure (whatever type it is) on which the the function will perform its action, m(:).
Using the above description you can take a look at the example below (from mathworks website) and make an analogy . Here the task is to extract first three characters from the str elements. Hope this helps!
str = ["Saturday","Sunday"]
str = 1×2 string array
"Saturday" "Sunday"
B = cellfun(@(x) x(1:3),str,'UniformOutput',false)
B = 1×2 cell array
{'Sat'} {'Sun'}

Categories

Find more on Cell Arrays 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!