gpt4 book ai didi

matlab - bsxfun 不能像我期望的那样在常量函数上工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:12 25 4
gpt4 key购买 nike

在 Matlab R2016a 中,我有一大组成对的小 X 向量和 Y 向量(例如,10,000 个 1x3 X 向量与 10,000 个 1x3 Y 向量配对)。对于每个 {X,Y} 对,我想为 X 和 Y 中元素的每个成对组合计算一个 2 标量参数函数(因此在我的示例中我将得到 10,000 个 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 can also be a handle to any binary element-wise function not listed above. A binary element-wise function in the form of C = FUNC(A,B) accepts arrays A and B of arbitrary but equal size and returns output of the same size. Each element in the output array C is the result of an operation on the corresponding elements of A and B only. FUNC must also support scalar expansion, such that if A or B is a scalar, C is the result of applying the scalar to every element in the other input array.

在 R2016b 之后的版本中,它们的大小不必相等,但应该是 compatible sizes

在您展示的示例中,函数句柄的第一个输入是标量,第二个输入是向量 (y),函数针对 x 的每个元素求值,输出为应为 y

的大小

在您发布的情况下,对 bsxfun 的调用本质上等同于:

x = [1 2];
y = [1 2].';

yourfunc = @(x,y)x * y;

for k = 1:numel(x)
output(:,k) = yourfunc(x(k), y)
end

如果您想为每个条目返回一个 1,您需要将您的函数替换为能够产生适当大小的输出的函数。

bsxfun(@(x,y)ones(max(size(x), size(y))), [1 2], [1 2]')

如何制定函数句柄取决于您的具体问题

关于matlab - bsxfun 不能像我期望的那样在常量函数上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41536953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com