我正在尝试为fun
函数的nlfilter
参数提供两个参数。我想通过使用我创建的函数assign_value
的句柄来做到这一点。这是我的功能:
function y = assign_value(x, ii)
index= x([1 2 3 4 6 7 8 9]);
if ismember(ii, index)==1
x(5)= ii; % 'ii' is the cloud object ID
end
y=x;
end
我已经删除了一些MATLAB文档(例如1,2,3),并看到了一些答案(4,5等) ,但我仍然需要帮助来解决我的具体问题,以了解函数的句柄是如何工作的。
这是我正在尝试做的事情(x
是一个9by9双类矩阵)
ii= 127
y= nlfilter(x, [3 3], @assign_value)
我得到的错误是:
??? Subscripted assignment dimension mismatch.
Error in ==> nlfilter at 75
b(i,j) = feval(fun,x,params{:});
任何帮助都会非常感谢,提前谢谢。
ANSWER
感谢Acorbe的评论,我终于成功了。由于y
函数的assign_value
输出是一个数组,并且fun
nlfilter
参数必须只输出标量,我将我的函数更改为:
function y = assign_value(x, ii)
index= x([1 2 3 4 6 7 8 9]);
if ismember(ii, index)==1
x(5)= ii; % 'ii' is the cloud object ID
end
y=x(5);
end
并且正在做:
y= nlfilter(x, [3 3], @(x) assign_value(x, ii));
我的结果很好。 再次感谢Acorbe的宝贵贡献。
答案 0 :(得分:1)
如果我正确理解您的问题,您希望生成由assign_value
的值参数化的函数ii
的单变量版本。当nlfilter
调用时,此函数将运行本地过滤过程。
正如您所说的功能句柄可以提供帮助;特别是你可以定义
my_ii = 127;
assign_value_parametric = @(x) assign_value(x,my_ii);
并将其用作
y= nlfilter(x, [3 3], assign_value_parametric).
lambda函数assign_value_parametric
依赖于一个因变量(x)
,因为参数ii
已经被修复过一次。
一般来说,考虑到这允许一系列显着的机制。
特别是当你在定义它的函数之外返回函数句柄时,它所依赖的参数会自动被遮蔽,但是,当调用函数句柄时它们会被隐式使用。
编辑:对您的过滤内核以及您获得的错误的进一步评论。
我担心你设计的内核不会产生你需要的行为。考虑内核应该返回标量值,该标量值是x
周围给定过滤窗口的x
点处的过滤器输出。在您的情况下,您总是返回原始过滤窗口,可能会更改值。