2011-11-15 28 views
3

我有以下计算我想要在matlab中进行矢量化。Matlab的外置函数?怎么样?

我有一个N×3的数组,称之为a。 我有一个4×1单元格的函数句柄数组,称它们为b

我想创建一个Nx4矩阵c,这样c(i,j) = b{j}(a(i,:)

b实际上是一个数组,但我不知道如何用matlab会理解使用矩阵的格式写下我对c的表示形式。

回答

2

如果你的函数处理数组上工作(即b{j}(a)在您的示例返回一个NX1阵列),您可以使用CELLFUNCELL2MAT来生成输出数组:

c = cell2mat(cellfun(@(bFun)bFun(a),b,'UniformOutput',false)); 

如果你的函数处理上一般只工作行(即b{j}需要分别应用于a的每一行,您可以将ARRAYFUN放入混合中(可读性受到一点影响;基本上,您通过cellfun将b的每个元素应用于通过arrayfun的a的每一行):

c = cell2mat(... 
     cellfun(@(bFun)arrayfun(... 
      @(row)bFun(a(row,:)),1:size(a,1)),... 
     b,'UniformOutput',false) ... 
    ); 
1

pdist2几乎解决了上述问题。也许有人比我更聪明,可以想出如何将两者联合起来。