【发布时间】:2015-02-21 06:09:30
【问题描述】:
我有一个 Matlab 函数 z = foo(x, y),它接受两个列向量作为输入并输出一个标量。现在我想将此函数应用于两个矩阵 A(维度 n * d1)和 B(维度 n * d2)并生成一个 d1 * d2 矩阵,例如output(i, j) = foo( A(:, i), B(:, j) )。它应该基本上类似于将corr 函数应用于两个矩阵的行为。
我尝试了this link中的解决方案,但在第一个答案中遇到了同样的问题,第二个解决方案中的meshgrid步骤太慢了。
有什么建议吗?提前非常感谢!
【问题讨论】:
-
您的
foo函数可以接受矩阵还是需要逐列传递? -
它只接受两个列向量。
-
那么在这种情况下,您无论如何都不必循环吗?您是否测试过传入两个 m-by-1-by-n 矩阵并查看它是否有效?您可能需要重新编写函数,以便它可以接受这样的输入
-
@sean_xia 为什么
bsxfun解决方案不适合您?你遇到了什么问题?bsxfun( @(ii,jj) foo(A(:,ii),A(:,jj)), (1:d1)', 1:d2)不工作? -
@Shai 这是我尝试过的。首先设置两个测试矩阵
n = 1000; d1 = 30; d2 = 100; A = randn(n, d1); B = randn(n, d2)。然后应用您的代码:bsxfun( @(ii,jj) dot(A(:,ii),A(:,jj)), (1:d1)', 1:d2)给我错误“A 和 B 必须相同大小”。使用我的函数:bsxfun( @(ii,jj) foo(A(:,ii),A(:,jj)), (1:d1)', 1:d2)时,错误消息是“使用 bsxfun 时出错。无效的输出尺寸”。
标签: matlab