Matlab Codegen:不支持匿名函数
Posted
技术标签:
【中文标题】Matlab Codegen:不支持匿名函数【英文标题】:Matlab Codegen: Does not support anonymous functions 【发布时间】:2014-09-13 05:29:21 【问题描述】:我正在尝试将一些 Matlab 代码更改为 C++,但是当我使用 %#codegen 时,vec = @(x) x(:);
旁边会出现错误“代码生成不支持匿名函数”。下面是 Matlab 函数。我可以更改什么来消除此错误?
function [L,num,sz] = label(I,n) %#codegen
% Check input arguments
error(nargchk(1,2,nargin));
if nargin==1, n=8; end
assert(ndims(I)==2,'The input I must be a 2-D array')
sizI = size(I);
id = reshape(1:prod(sizI),sizI);
sz = ones(sizI);
% Indexes of the adjacent pixels
vec = @(x) x(:);
if n==4 % 4-connected neighborhood
idx1 = [vec(id(:,1:end-1)); vec(id(1:end-1,:))];
idx2 = [vec(id(:,2:end)); vec(id(2:end,:))];
elseif n==8 % 8-connected neighborhood
idx1 = [vec(id(:,1:end-1)); vec(id(1:end-1,:))];
idx2 = [vec(id(:,2:end)); vec(id(2:end,:))];
idx1 = [idx1; vec(id(1:end-1,1:end-1)); vec(id(2:end,1:end-1))];
idx2 = [idx2; vec(id(2:end,2:end)); vec(id(1:end-1,2:end))];
else
error('The second input argument must be either 4 or 8.')
end
% Create the groups and merge them (Union/Find Algorithm)
for k = 1:length(idx1)
root1 = idx1(k);
root2 = idx2(k);
while root1~=id(root1)
id(root1) = id(id(root1));
root1 = id(root1);
end
while root2~=id(root2)
id(root2) = id(id(root2));
root2 = id(root2);
end
if root1==root2, continue, end
% (The two pixels belong to the same group)
N1 = sz(root1); % size of the group belonging to root1
N2 = sz(root2); % size of the group belonging to root2
if I(root1)==I(root2) % then merge the two groups
if N1 < N2
id(root1) = root2;
sz(root2) = N1+N2;
else
id(root2) = root1;
sz(root1) = N1+N2;
end
end
end
while 1
id0 = id;
id = id(id);
if isequal(id0,id), break, end
end
sz = sz(id);
% Label matrix
isNaNI = isnan(I);
id(isNaNI) = NaN;
[id,m,n] = unique(id);
I = 1:length(id);
L = reshape(I(n),sizI);
L(isNaNI) = 0;
if nargout>1, num = nnz(~isnan(id)); end
【问题讨论】:
【参考方案1】:您可以使用以下功能并评论匿名功能
function x=vec( id )
x = id(:);
end
这基本上和你的匿名实现的一样
【讨论】:
谢谢。函数 vec 的“id”参数是什么定义类型?例如。单(1 x Inf)? @user3926194 我不明白你的问题。你问id
的数据类型是什么?它与作为参数传递给 vec
的任何内容相同。【参考方案2】:
MATLAB Coder 从 R2016b 开始支持匿名函数。上述示例适用于最新版本的 MATLAB Coder(2021 年 11 月 30 日检查)。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Matlab Codegen:不支持匿名函数的主要内容,如果未能解决你的问题,请参考以下文章