MATLAB Answers

coder.extrinsic size mismatch

13 views (last 30 days)
I use in a function:
STDinputs(nset1,nimp1)=nanstd(inputstemp,0,2);
AVinputs(nset1,nimp1)=nanmean(inputstemp,2);
inputstemp size is (100,33,2000);
nset1=1:100;
nimp1=1:2000;
This 2 lines works very well in Matlab code but when I try to compile mex file using :
coder.extrinsic('nanstd','nanmean');
compiler return this error:
"MATLAB expression 'nanstd' is not of the correct size: expected [100x2000] found [100x1x2000]."
What's wrong?
I use "codegen" in this modality:
cfg=coder.config;
cfg.ResponsivenessChecks = false;
cfg.ExtrinsicCalls = true;
cfg.IntegrityChecks = false;
cfg.SaturateOnIntegerOverflow = false;
codegen -config cfg OPTIM2_GeneticPattern -args {zeros(100,82,'double')};
I want to import nanstd & nanmean in a mex file but size of imputstemp is not recognized well and it return an error.

  0 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 1 Jun 2016
You are taking nanstd() of a 3D array along the second dimension. The result is going to have a full first and third dimension and a second dimension of 1, but you are expecting the second dimension to have vanished. You should either be assigning to a variable that has a second dimension of 1, or you should be using squeeze(), or you should permute(inputstemp, [1 3 2]) and nanmean along the third dimension so that it will be the trailing dimension that will vanish.

  1 Comment

Emiliano Rosso
Emiliano Rosso on 1 Jun 2016
thank you so much I successfully solved!
STDinputs(nset1,nimp1)=squeeze(nanstd(inputstemp,0,2));
AVinputs(nset1,nimp1)=squeeze(nanmean(inputstemp,2));

Sign in to comment.

More Answers (0)

Sign in to answer this question.