combination function using ndgrid

2 visualizzazioni (ultimi 30 giorni)
Nik Sam
Nik Sam il 18 Mag 2016
Commentato: Nik Sam il 19 Mag 2016
Hello,
I want to build a function which use ndgrid.
My function is
function [ varargout ] = comb( varargin )
[varargout]=ndgrid(varargin)
varargout=varargout(:);
disp([varargout])
end
My varargout are x1 x2 x3 and varargin are a,b,c where a=[1 2], b=[2 3] and c=[1 4]. Expected results are
1 2 1
2 2 1
1 3 1
2 3 1
1 2 4
2 2 4
1 3 4
2 3 4
but it seems like ndgrid doesn't work. What can i do? In command window works fine but as a function where I can put more varargins something is wrong.

Risposta accettata

Guillaume
Guillaume il 18 Mag 2016
function varargout = comb(varargin)
varargout = cell(1, nargout);
[varargout{:}] = ndgrid(varargin{:}; %distribute to varargout
varargout = cellfun(@(m) reshape(m, [], 1), varargout, 'UniformOutput', false); %reshape into columns
end
  10 Commenti
Guillaume
Guillaume il 19 Mag 2016
[varargout{:}]
at the end of the function will do it. This will always display the output whether or not you terminate the call to comb with a semicolon, so I wouldn't recommend it.
There is no way to detect if a function has called with a semicolon or not, so you can't toggle that behaviour.
Nik Sam
Nik Sam il 19 Mag 2016
Really thanks for your time my friend..Now finally I have the desired result..
Thanks again...

Accedi per commentare.

Più risposte (2)

Walter Roberson
Walter Roberson il 18 Mag 2016
[varargout{:}] = ndgrid(varargin{:});
  3 Commenti
Walter Roberson
Walter Roberson il 18 Mag 2016
function [ varargout ] = comb( varargin )
[varargout{1:nargout}] = ndgrid(varargin{:});
end
Nik Sam
Nik Sam il 18 Mag 2016
This works my friend but if I run the following
>> a=[1,2];
>> b=[2,3];
>> c=[1,4];
>> [x1,x2,x3]=comb(a,b,c)
I get this
x1(:,:,1) =
1 1
2 2
x1(:,:,2) =
1 1
2 2
x2(:,:,1) =
2 3
2 3
x2(:,:,2) =
2 3
2 3
x3(:,:,1) =
1 1
1 1
x3(:,:,2) =
4 4
4 4
But i want as result:
1 2 1
2 2 1
1 3 1
2 3 1
1 2 4
2 2 4
1 3 4
2 3 4

Accedi per commentare.


Jos (10584)
Jos (10584) il 18 Mag 2016
Take a look the content of ALLCOMB, which does exactly what you're after btw...

Categorie

Scopri di più su Argument Definitions in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by