【问题标题】:Matlab - Apply a function to specific sub-dimensions of multidimensional array onlyMatlab - 仅将函数应用于多维数组的特定子维度
【发布时间】:2017-02-23 13:30:13
【问题描述】:

我想知道在 Matlab 中是否有可能在不使用 for 循环的情况下仅在 N x M x K 数组的 N x M 部分上映射函数。具体来说,我有一个 N x M 矩阵,其中包含长度为 3 的向量,所以我的整体结构是 N x M x 3。现在我想计算每个向量的范数,所以最好只应用一个函数将 1 x 3 向量作为输入,并应用于“顶部”N x M 部分的每个单元格,从而生成一个 N x M x 1 数组。

我目前的做法是使用 for 循环并通过索引 (i,j,:) 提取相关部分。现在我只是好奇是否有更好的解决方案。 :) 似乎可以通过 cellfun 实现 N x M 单元阵列,但我无法在普通阵列上找到任何方法。

提前致谢!

【问题讨论】:

    标签: matlab multidimensional-array


    【解决方案1】:

    一些 Matlab 函数,例如 sum 允许您指定要执行的维度。 使用范数的定义,对于一个输入数组a:

    sqrt(sum(a.^2,3))
    

    应该返回第 3 维的范数。

    【讨论】:

      【解决方案2】:
      1. 您可以使用 num2cell 或 mat2cell 对矩阵进行切片,然后应用 cellfun
      2. 您可以使用 arrayfun(@(x,y)... 将 x 作为矩阵,将 y 作为索引。另一种方法是使用 bsxfun

      如果您不想处理整个矩阵,只需将部分源数据发送到 cellfun,以节省内存和时间

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        相关资源
        最近更新 更多