Matlab - 仅将函数应用于多维数组的特定子维

时间:2017-02-23 13:30:13

标签: matlab multidimensional-array

我想知道在Matlab中是否有可能仅在N x M x K阵列的N x M部分上映射函数而不使用for循环。具体来说,我有一个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 cellarray,但我无法在普通数组上找到任何方法。

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

应该沿第3维返回标准。

答案 1 :(得分:0)

  1. 您可以使用num2cell或mat2cell对矩阵进行切片,然后应用cellfun
  2. 您可以使用arrayfun(@(x,y)...将x作为矩阵,y作为索引。另一种方法是使用bsxfun
  3. 为了节省内存和时间,如果您不想处理整个矩阵,只需将部分源数据发送到cellfun