我正在尝试使用Matlab编码器从.m文件生成一个mex代码文件。代码是
function [result,x]=tesrank(A,x)
result = [];
n = x;
for col= 1:n
result = [result, sum(A==col, 2)];
end
对于固定大小,我可以使用
获取它codegen tesrank -args {zeros(2,3), zeros(1)}
% Here size(A)=2x3 and size(x)=1x1
如何在不限制A和x的大小的情况下进行此操作?
答案 0 :(得分:1)
您不必限制数组A的大小。
检查此示例(使用Matlab 2014a):
codegen('funcAccumarray1D_max.m', ...
'-report', ...
'-args', {coder.typeof(double(0), [Inf 1]), ...
coder.typeof(double(0), [Inf 1])}, ...
'-o', 'funcAccumarray1D_max')
这个功能:
function [ outs ] = funcAccumarray1D_max(subs, vals, sz)
%FUNCACCUMARRAY1D_MAX Construct an array by accumulation using 'max'
%#codegen
outs = NaN(sz, 1, 'like', vals);
for ix=1:size(subs,1)
sub = subs(ix);
outs(sub,1) = max(outs(sub,1), vals(ix,1));
end
end
答案 1 :(得分:0)
对于构建,函数coder.typeof
是您的朋友。要做你想要的,即拥有允许无界尺寸的变量,你可以用这种方式声明你的输入参数:
codegen tesrank -args {coder.typeof(0, [Inf, Inf]), coder.typeof(0, [1, Inf])}
在我的例子中,A在两个维度上是完全无界的(你可以有两个以上,只是将size数组的长度增加到typeof)并且x在第一维中被限制为大小为1,但是无界限在第二个维度。看看你的代码,你可能不希望x无界限,但如果你这样做,那就是你如何做到的。
你可以探索更多coder.typeof的功能。
答案 2 :(得分:-1)
根据Mathworks'documentation的第7-15页和第25-24页,您不能这样做。