在Matlab R2016a中,我有一组成对的小X向量和Y向量(例如10000个1x3 X向量与10000个1x3 Y向量配对)对于每个{X,Y}对,我想为X和Y中元素的每对组合计算一个2标量参数函数(因此在我的示例中,我将得到10000个3x3矩阵)。
我想我可以使用bsxfun来执行这些计算,但是当我尝试做一些简单的测试时,它就不起作用了bsxfun(@(x,y) x*y,[1 2],[1 2]')
返回:
ans =
1 2
2 4
这就是我所期望的但是,
bsxfun(@(x,y) 1,[1 2],[1 2]')
返回:Error using bsxfun
Specified function handle produces invalid output dimensions. The function handle
must be a binary elementwise function.
这毫无意义函数句柄是一个二进制元素级函数,总是返回标量1,因此
bsxfun
应该给出与ones(2,2)
相同的结果,除非我不理解bsxfun
是如何工作的。 最佳答案
传递给bsxfun
的函数句柄的输入不是标量在R2016b之前的版本中,输入要么是标量,要么是相同的大小。FUNC
也可以是未列出的任何二进制元素函数的句柄
上面形式为C = FUNC(A,B)
的二元函数
接受任意大小但大小相等的数组A
和B
,并返回输出
同样大小的输出数组中的每个元素都是
仅对C
和A
的相应元素进行操作B
必须
也支持标量扩展,如果FUNC
或A
是标量,B
是
对其他输入数组中的每个元素应用标量的结果。
在自R2016b以来的版本中,它们不必大小相等,但应该小于aa>
在您所示的示例中,函数句柄的第一个输入是标量,第二个是向量(C
),对x的每个元素计算函数,输出的大小预计为y
在您发布的案例中,对y
的调用实际上相当于:
x = [1 2];
y = [1 2].';
yourfunc = @(x,y)x * y;
for k = 1:numel(x)
output(:,k) = yourfunc(x(k), y)
end
如果要为每个条目返回
bsxfun
,则需要用生成适当大小输出的内容替换函数。bsxfun(@(x,y)ones(max(size(x), size(y))), [1 2], [1 2]')
如何制定函数句柄实际上取决于您的特定问题
关于matlab - bsxfun无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41536953/