【问题标题】:Apply function by column with several inputs in matlab在matlab中使用多个输入按列应用函数
【发布时间】:2019-01-15 10:55:17
【问题描述】:

使用多列作为参数对矩阵应用函数,以应用具有多个输入的函数。

A = [1 2 3];
B = [4 5 6];
C = [7 8 9];

% This is the function I want use,
bsxfun(@(x,y,z) 1/(sqrt(2*pi*z)) * exp((-(x-y).^2)/(2*z)), A, B, C)

但不起作用,仅适用于两个输入:

bsxfun(@(x,y) x+y, A, B)

bsxfun 的错误输出是:

error: Invalid call to bsxfun.  Correct usage is:

 -- bsxfun (F, A, B)

这说明我不能用超过 2 个输入来做到这一点..

函数的预期计算基本上是:

[1/(sqrt(2*pi*C1))*exp((-(A1-B1).^2)/(2*C1))
    1/(sqrt(2*pi*C2))*exp((-(A2-B2).^2)/(2*C2))
    1/(sqrt(2*pi*C3))*exp((-(A3-B3).^2)/(2*C3))]

分别为A1,B1,C1A,B,C的第一个元素到N为N个向量的元素个数(长度相同)

result = [ 0.079 0.08 0.08 ]

【问题讨论】:

  • 完成,语法编辑,预期结果和错误解释。感谢修订:)
  • 使用Octave,但我希望在matlab中使用它,在这种问题的情况下它们具有相同的语法?一旦在我的 matlab 软件中运行,我将更新帖子。
  • 完美,所以我将警告修改为matlab警告,因为它将是我的开发环境。

标签: matlab bsxfun


【解决方案1】:

这里不需要bsxfun。您只需要适当地定义函数句柄即可。

f =  @(x,y,z) 1./(sqrt(2*pi*z)).*exp((-(x-y).^2)./(2*z));

现在你的预期结果是:

f(A,B,C)

【讨论】:

  • 太棒了!我不知道这种解决方法,我来自python,谢谢!
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多