2017-02-23 107 views
0

我想知道在Matlab中是否存在某种可能性来仅在N×M×K数组的N×M部分上映射函数,而无需使用for-loops。具体来说,我有一个包含长度为3的向量的N×M矩阵,所以我的总体结构是N×M×3。现在我想计算每个向量的范数,因此,应用函数,它将1×3向量作为输入,并将其应用于N×M部分的每个单元“顶部”,从而产生N×M×1阵列。Matlab - 仅对多维数组的特定子维应用函数

我现在这样做的方式是通过使用for-loops并通过索引(i,j,:)提取相关部分。现在我只是好奇,如果有更好的解决方案。 :) 这似乎是可能的通过cellfun一个N×M cellarray,但我找不到任何方式在正常的数组上做到这一点。

在此先感谢!

回答

1

某些Matlab函数(如总和)允许您指定要执行的维度。 使用规范的定义中,对于输入阵列的:

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

应沿第三维度返回常态。

0
  1. 可以使用num2cell切片矩阵或mat2cell,然后应用cellfun
  2. 您可以使用arrayfun(@(X,Y)...,其中x是你的矩阵和y是指数。另一种方式是使用bsxfun

为了节省内存和时间只是发送源数据的一部分cellfun如果你不想处理整个矩阵