我有以下计算我想在matlab中进行矢量化。
我有一个N x 3阵列,称之为a
。
我有一个4 x 1单元格的函数句柄,称之为b
。
我想创建一个Nx4矩阵c
,这样c(i,j) = b{j}(a(i,:)
。
b
实际上是一个数组,但我不知道如何以matlab理解使用矩阵的格式写下c的表示。
答案 0 :(得分:3)
如果您的函数处理数组(即b{j}(a)
返回示例中的Nx1数组),您可以使用CELLFUN和CELL2MAT生成输出数组:
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 :(得分:1)
pdist2几乎解决了上述问题。可能比我更聪明的人可以弄清楚如何将两者结合起来。