bsxfun真的在元素方面应用了吗



假设我有以下函数:

function x = printAndKeepX(x, y)
    x
    y
end

我调用CCD_ 1就像这样:

bsxfun(@printAndKeepX, 1:4, 1);

如果bsxfun真的是一个接一个的元素,我希望printAndKeepX被调用4次,参数(x, y)分别是(1, 1)(2, 1)(3, 1)(4, 1)。但输出显示它只被调用一次,(x, y)bsxfun0:

x =
     1     2     3     4
y =
     1

为什么?我怎么知道什么是"元素"?

编辑:
文档表明,有时被调用的函数可以接收两个标量,有时可以接收一个向量/矩阵和一个标量。我能确定哪一个会发生吗?

我对bsxfun的常规版本和GPU版本都感兴趣。

文档还指出:

fun还必须支持标量扩展,这样,如果AB是标量,则C是将标量应用于其他输入数组中的每个元素的结果。

在您的情况下,B实际上是一个标量,因此您的函数只在A上应用一次。

当输入数组是矩阵时也是如此。例如,考虑一种情况,其中bsxfun是用大小为m×n的矩阵A={aij}和大小为m×1的向量B={b>ij}调用的。B将沿第二维度复制n次,函数调用如下:

function([a11, ..., a1n], b1)
function([a21, ..., a2n], b2)
...
function([am1, ..., amn], bm)

这导致n函数调用矢量标量输入,而mn功能调用标量对。如果函数被矢量化,它可能会反映在可能显著的性能增益中。

相关内容

  • 没有找到相关文章

最新更新