linear combination of vector and permutation

조회 수: 7 (최근 30일)
Fidele Adanvo
Fidele Adanvo 2022년 10월 3일
댓글: Stephen23 2022년 10월 4일
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],

채택된 답변

Torsten
Torsten 2022년 10월 3일
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
Fidele Adanvo
Fidele Adanvo 2022년 10월 4일
thank you
Matt J
Matt J 2022년 10월 4일
편집: Matt J 2022년 10월 4일
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

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Matt J
Matt J 2022년 10월 3일
편집: Matt J 2022년 10월 3일
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
Fidele Adanvo
Fidele Adanvo 2022년 10월 4일
thank you
Stephen23
Stephen23 2022년 10월 4일
+1 very neat usage of CAT and RESHAPE.

댓글을 달려면 로그인하십시오.


James Tursa
James Tursa 2022년 10월 4일
편집: James Tursa 2022년 10월 4일
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

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by