linear combination of vector and permutation

7 Ansichten (letzte 30 Tage)
Fidele Adanvo
Fidele Adanvo am 3 Okt. 2022
Kommentiert: Stephen23 am 4 Okt. 2022
Hi, i' m developing a program where I find myself with this problem that I couldn't solve nem with combntns(v,k) or with nchoosek .
Anyone here to help me?
Let A=[-1,1] and B=3
I need to find all possible combinations taking from B to B vector element A ( It can be with repetition of the vector element )
I have done it manually, but I need it automatically, or a Matlab function does it.
Let A and B the output of this function has to be:
Out=[-1,-1,-1;
-1,-1, 1
-1, 1,-1
-1, 1, 1
1,-1,-1
1,-1, 1
1, 1,-1
1, 1, 1],

Akzeptierte Antwort

Torsten
Torsten am 3 Okt. 2022
values = [-1 1]; %// data
k = 3; %// data
n = numel(values); %// number of values
combs = values(dec2base(0:n^k-1,n)-'0'+1) %// generate all tuples
combs = 8×3
-1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1
  2 Kommentare
Fidele Adanvo
Fidele Adanvo am 4 Okt. 2022
thank you
Matt J
Matt J am 4 Okt. 2022
Bearbeitet: Matt J am 4 Okt. 2022
This approach is rather slow, if that matters...
values = -2:2; %// data
k = 9;
timeit(@()version1(values,k))
ans = 0.5780
timeit(@()version2(values,k))
ans = 0.0763
function version1(values,k)
n = numel(values); %// number of values
combs = values(dec2base(0:n^k-1,n)-'0'+1); %// generate all tuples
end
function version2(A,B)
[Out{1:B}]=ndgrid(A);
Out=reshape( cat(B+1,Out{:}),[],B);
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Matt J
Matt J am 3 Okt. 2022
Bearbeitet: Matt J am 3 Okt. 2022
One way:
A=[-1,1];B=3;
[Out{1:B}]=ndgrid(A);
Out=reshape( cat(B+1,Out{:}),[],B)
Out = 8×3
-1 -1 -1 1 -1 -1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 -1 1 1 1 1 1
  2 Kommentare
Fidele Adanvo
Fidele Adanvo am 4 Okt. 2022
thank you
Stephen23
Stephen23 am 4 Okt. 2022
+1 very neat usage of CAT and RESHAPE.

Melden Sie sich an, um zu kommentieren.


James Tursa
James Tursa am 4 Okt. 2022
Bearbeitet: James Tursa am 4 Okt. 2022
Another way very similar to Torsten's method, limited to two desired values:
n = 3;
2*(dec2bin(0:2^n-1)-'0')-1
ans = 8×3
-1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by