假设我有以下函数:
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)
是bsxfun
0:
x =
1 2 3 4
y =
1
为什么?我怎么知道什么是"元素"?
编辑:
文档表明,有时被调用的函数可以接收两个标量,有时可以接收一个向量/矩阵和一个标量。我能确定哪一个会发生吗?
我对bsxfun
的常规版本和GPU版本都感兴趣。
文档还指出:
fun
还必须支持标量扩展,这样,如果A
或B
是标量,则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功能调用标量对。如果函数被矢量化,它可能会反映在可能显著的性能增益中。