Map function in MATLAB?

前端 未结 7 831
情书的邮戳
情书的邮戳 2020-11-29 17:11

I\'m a little surprised that MATLAB doesn\'t have a Map function, so I hacked one together myself since it\'s something I can\'t live without. Is there a better version out

7条回答
  •  一生所求
    2020-11-29 17:52

    The short answer: the built-in function arrayfun does exactly what your map function does for numeric arrays:

    >> y = arrayfun(@(x) x^2, 1:10)
    y =
    
         1     4     9    16    25    36    49    64    81   100
    

    There are two other built-in functions that behave similarly: cellfun (which operates on elements of cell arrays) and structfun (which operates on each field of a structure).

    However, these functions are often not necessary if you take advantage of vectorization, specifically using element-wise arithmetic operators. For the example you gave, a vectorized solution would be:

    >> x = 1:10;
    >> y = x.^2
    y =
    
         1     4     9    16    25    36    49    64    81   100
    

    Some operations will automatically operate across elements (like adding a scalar value to a vector) while others operators have a special syntax for element-wise operation (denoted by a . before the operator). Many built-in functions in MATLAB are designed to operate on vector and matrix arguments using element-wise operations (often applied to a given dimension, such as sum and mean for example), and thus don't require map functions.

    To summarize, here are some different ways to square each element in an array:

    x = 1:10;       % Sample array
    f = @(x) x.^2;  % Anonymous function that squares each element of its input
    
    % Option #1:
    y = x.^2;  % Use the element-wise power operator
    
    % Option #2:
    y = f(x);  % Pass a vector to f
    
    % Option #3:
    y = arrayfun(f, x);  % Pass each element to f separately
    

    Of course, for such a simple operation, option #1 is the most sensible (and efficient) choice.

提交回复
热议问题