Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab arrayfun在n维矩阵上的应用_Matlab_Vector_Matrix Indexing - Fatal编程技术网

Matlab arrayfun在n维矩阵上的应用

Matlab arrayfun在n维矩阵上的应用,matlab,vector,matrix-indexing,Matlab,Vector,Matrix Indexing,我需要你的帮助来解决以下问题: 如何对任何n维数组概括以下内容: reshape(arrayfun(@(x,y)sprintf('%d,%d',x,y),C{:},'un',0),size(M)); M是我的矩阵,C是我的M的索引矩阵 提前感谢。问题不在于arrayfun参数本身的维数,而在于参数本身的数目——在您的示例中,这与每个参数的维数相对应。因此,您需要向其传递一个接受varargin的函数,该函数仍然适用于匿名函数: reshape(arrayfun(@(varargin)sprin

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

如何对任何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));

问题不在于
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列表示
x1
x5
例如:

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

这个功能让我很头疼

对于函数,如

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列表示
x1
x5
例如:

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

我需要作为varargin传递的是匿名函数的输入参数列表,它是
arrayfun
的第一个参数。传递给该匿名函数的参数是
arrayfun
的下一个参数,即
C
的每个单元格中包含的数组。您的原始示例也是这样工作的,只需在
C
中有固定数量(2)的元素才能作为参数传递给匿名函数。我需要作为varargin传递什么?
varargin
是匿名函数的输入参数列表,它是
arrayfun
的第一个参数。传递给该匿名函数的参数是
arrayfun
的下一个参数,即
C
的每个单元格中包含的数组。您的原始示例也是这样工作的,只需要在
C
中有固定数量(2)的元素才能作为参数传递给匿名函数。