在 n 维矩阵上应用 arrayfun

applying arrayfun on n-dimensional matrixes

我需要你的帮助来解决以下问题:

我如何为任何 n 维数组概括以下内容:

reshape(arrayfun(@(x,y)sprintf('%d,%d',x,y),C{:},'un',0),size(M));

M 是我的矩阵,C 是我的 M 索引矩阵。

提前致谢。

问题不在于 arrayfun 的参数中的维数本身,而是参数本身的数量 - 在您的示例中,这与每个参数的维数相对应。因此,您需要向它传递一个接受 varargin 的函数,该函数仍然适用于匿名函数:

reshape(arrayfun(@(varargin)sprintf(strjoin(repmat('%d',size(varargin)),','),varargin{:}),C{:},'un',0),size(M));

这个功能让我很头疼

对于像

这样的函数
f1 = @(x1,x2) x1*x2

你可以做到

output = arrayfun(f1,x1,x2);

其中 x1 和 x2 是输入列。

但是,如果您正在执行广义程序,其中 f1 可以有任意数量的输入并且您需要像 X 这样的广义输入矩阵,例如

f1 = @(x1,x2,x3,x4,x5) 2*x1+4*x2+10*x3+0.2*x4+x5;

output = arrayfun(f1,num2cell(X,1){:});

其中 X 表示具有 5 列的矩阵,表示 x1x5 例如:

X = [1, 2, 3, 4, 5;
     6, 7, 8, 9, 0;];