como produzir toda permutação do posicionamento de 20 valores de -1 em um vetor de 1 por 41 deles?

Eu escrevi um código diferente para produzir permutações diferentes de uns e menos. eles trabalham para matrizes com pequenas dimensões:

por exemplo:

S=[-1 -1 1 1 1 1 1 1];
P=unique(perms(S),'rows');

produz:

-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
-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
 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
 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
 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

ou

indices = nchoosek(1:41, 6);
N = size(indices, 1);
S = ones(N, 41);
S(sub2ind([N 41], [1:N 1:N 1:N 1:N 1:N 1:N].', indices(:))) = -1;

pode produzir uma matriz de 4496388_by_41 de todas as permutações de 6 menos um (-1) e 35 um (1).

esses códigos funcionam para dimensões menores, mas não funcionam para as matrizes com dimensões maiores.

meu objetivo é produzir todas as permutações de 20 menos um (-1) e 21 um (1) essa matriz possui 269128937220 linhas e 41 colunas. mas os seguintes códigos não funcionam:

indices = nchoosek(1:41, 20);
N = size(indices, 1);
S = ones(N, 41);
S(sub2ind([N 41], [1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N].', indices(:))) = -1;

ou

S=[-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];
P=unique(perms(S),'rows');

Eu faço um cálculo simples em cada permutação (cada linha desta matriz). se eu pudesse escrever cada linha desta matriz com loops for e, em seguida, fazer o cálculo nessa linha, seria capaz de manter o melhor resultado e, nessa situação, não precisaria manter todos esses dados na memória e não não há erros de memória no matlab.

se você sabe como produzir uma matriz de todas as permutações de 20 menos uma (-1) e 21 uma (1) com loops ou qualquer outra maneira de armazená-las no meu computador, por favor, ajude.

desde já, obrigado