2

假设我有以下功能:

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

我这样调用bsxfun

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

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

x =
     1     2     3     4

y =
     1

为什么?我怎么知道什么是“元素”?

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

我对bsxfun.

4

1 回答 1

4

文件还指出:

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

在你的情况下B实际上是一个标量,所以你的函数只应用A一次。

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

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

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

于 2013-08-06T12:11:28.653 回答