【问题标题】:Apply a function to each element of a matrix in Matlab [duplicate]将函数应用于Matlab中矩阵的每个元素[重复]
【发布时间】:2015-11-05 13:59:07
【问题描述】:

我有一个 480x640 大小的矩阵(比如说A)。我想要另一个相同大小的矩阵(B),其中B 中的每个元素都是A 中相应元素的exp()
除了常规的 for 循环之外,还有一种优雅的方法吗?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    正如Shai's answer 所说,在良好的 MATLAB 实践环境中,几乎总是最好尝试利用 MATLAB 中内置的向量化运算。

    但是,要回答明确的问题,请使用 arrayfuncellfunstructfun 等函数。这些函数可以分别将函数应用于数组、元胞数组和结构的每个元素。这对于您想要做的事情没有内置或它不是矢量化操作的情况很有用。

    例如,arrayfun:

    A = [1, 2; 3, 4];
    B = arrayfun(@(x) exp(x), A);
    C = exp(A);
    
    test = all(B(:) == C(:)) % Test for equivalence
    

    test 返回true

    【讨论】:

    • 为避免混淆,值得一提的是您没有必须将匿名函数与arrayfun 一起使用! arrayfun(@exp, A) 很好。
    • 你忘记了spfun。 @Will 试着想想如果你 spfun(@exp, S) vs exp(S) 会发生什么;)
    【解决方案2】:

    expvectorized 操作:

    B = exp(A);
    

    没有比这更优雅的了;)

    请注意,Matlab 中的大多数操作默认是矢量化的,因此您不需要显式循环遍历矩阵的所有元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 2012-11-02
      • 2020-04-10
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多