Create a array of 1 and -1

2 views (last 30 days)
Mate 2u
Mate 2u on 4 May 2012
EDITED
Hi there, I want a 4 x 1 vector of all combinations of 1 and -1.
For instance [1 1 1 1] , [1 1 1 -1] , [1 1 -1 1]
etc..
  1 Comment
Walter Roberson
Walter Roberson on 4 May 2012
[1 1 1 -1] appears to be the same combination as [1 1 -1 1]. Are you sure you want combinations and not permutations?

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 4 May 2012
use function ff2n from Statistics Toolbox
out = ff2n(4)*2-1;
OR:
out = unique(nchoosek((-1).^(1:8),4),'rows');
  2 Comments
Dr. Seis
Dr. Seis on 4 May 2012
I knew there was a more efficient way to do this!
Andrei Bobrov
Andrei Bobrov on 4 May 2012
Thank you Elige.

Sign in to comment.

More Answers (2)

Walter Roberson
Walter Roberson on 4 May 2012
Taken how many at a time? If you say 2 at a time, then you have the problem that there are only 3 combinations: [-1 -1], [-1 1], [1 1]. The potential combination [1 -1] is the same combination as [-1 1] because by definition the order within a combination is irrelevant.
  2 Comments
Dr. Seis
Dr. Seis on 4 May 2012
4x1 array... i.e., [1;1;1;1], [1;1;1;-1], [1;1;-1;-1], ...
Mate 2u
Mate 2u on 4 May 2012
Wheres the input?

Sign in to comment.


Dr. Seis
Dr. Seis on 4 May 2012
Not the most efficient, but:
>> a=nchoosek([1,2,3,4,5,6,7,8],4);
>> b = ones(size(a));
>> b(mod(a,2)==0) = b(mod(a,2)==0)*-1;
>> c = unique(b,'rows')'
c =
Columns 1 through 12
-1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1
-1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1
-1 -1 1 1 -1 -1 1 1 -1 -1 1 1
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
Columns 13 through 16
1 1 1 1
1 1 1 1
-1 -1 1 1
-1 1 -1 1

Community Treasure Hunt

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

Start Hunting!