【发布时间】:2012-11-07 01:08:07
【问题描述】:
我有一个函数,它接受一个维度为 [1,2] 的矩阵并返回一个维度为 [1,136] 的矩阵。我还有一个维度矩阵 [N,2]。我想将此函数应用于矩阵的每一行,最终得到一个维度为 [N,136] 的矩阵。
我完全不知道如何在 Matlab 中做到这一点。一个 for 循环解决方案就足够了(此时我什至不能这样做),但据我所知,在 Matlab 中有更好、更可并行的处理方式。
我目前的尝试是这样的:
phi = arrayfun(@(x,y) gaussianBasis([x y])' , trainIn(:,1), trainIn(:,2), 'UniformOutput', false);
其中gaussianBasis 是一个返回向量[136,1] 的函数,trainIn 是一个矩阵[N,2]。 phi 应该是 [N,136],但这会返回一个由 N 个元胞数组组成的数组,每个元胞数组都包含一个矩阵 [1,136]。
感谢大家的帮助!
【问题讨论】:
-
@yoda 出现在 (+1) 上。正如您在问题中所建议的那样,也可以将您的函数
gaussianBasis向量化以接受 N*2 输入。如果可能,这应该比arrayfun方法运行得更快,因为arrayfun是often slower than an explicit loop。当然,要确定您的函数是否可以矢量化,我们需要实际查看它。干杯。 -
Yoda 的解决方案对我有用。我还不需要并行化任何东西,实际上我认为我在实现
gaussianBasis时可能犯了一个错误。操作系统也许这将是我稍后的下一个问题。谢谢:)。