【问题标题】:How to apply a function to each row of a matrix and get back a larger matrix如何将函数应用于矩阵的每一行并取回更大的矩阵
【发布时间】: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 方法运行得更快,因为arrayfunoften slower than an explicit loop。当然,要确定您的函数是否可以矢量化,我们需要实际查看它。干杯。
  • Yoda 的解决方案对我有用。我还不需要并行化任何东西,实际上我认为我在实现gaussianBasis 时可能犯了一个错误。操作系统也许这将是我稍后的下一个问题。谢谢:)。

标签: matlab matrix


【解决方案1】:

您只需要使用cat 并将其沿第一个维度连接起来:

phi = cat(1, phi{:})

这应该给你一个 N x 136 矩阵

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2021-06-20
    • 2016-01-20
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多