2013-08-14 2 views
2

Matlab 코더를 사용하여 .m 파일에서 mex 코드 파일을 생성하려고합니다. 코드는있는 나는 A와 X의 크기를 제한하지 않으면 내가 그것을 어떻게Matlab Coder의 가변 크기 입력 데이터 정의

codegen tesrank -args {zeros(2,3), zeros(1)} 
% Here size(A)=2x3 and size(x)=1x1 

를 사용하여 얻을 수있어, 고정 된 크기

function [result,x]=tesrank(A,x) 

result = []; 
n = x; 
for col= 1:n 
    result = [result, sum(A==col, 2)]; 
end 

입니까?

+0

이 함수에 대해 코드 생성을 실행하려고하면 오류가 발생합니다. 확인할 수 있습니까? –

+0

크기에 상한값을 부여하는 한 A와 x의 임의의 크기에 대해 이러한 종류의 코딩을 수행 할 수 있습니다. user2987828이 가리키는 문서를 참조하십시오. – Navan

답변

1

당신은 배열 A.

확인 (매트랩 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 
0

을 , 기능 coder.typeof은 여기에 친구입니다. 당신은 무제한의 차원을 허용 변수를 가지고있는,하고 싶은 일을하려면이 방법으로 사용자의 입력 인수를 선언합니다 : 내 예에서

codegen tesrank -args {coder.typeof(0, [Inf, Inf]), coder.typeof(0, [1, Inf])} 

를, A는 2 개 차원을 완전히 억제 할 것이다 (당신은 두 개 이상있을 수 있습니다 , sizeof의 길이를 typeof로 늘리십시오.) x는 첫 번째 차원에서 1의 크기로 정확하게 묶이지 만 두 번째 차원에서는 바인딩되지 않습니다. 코드를 보면, x를 무제한으로하고 싶지 않을 수도 있습니다. 그렇다면 그렇게하는 것이 좋습니다.

탐색 할 수있는 coder.typeof의 추가 기능이 있습니다.