2016-09-08 3 views
1

У меня есть вектор вроде этого:Все масштабируется сочетание элементов вектора в Matlab

A=[3 4 5 6]; 

Я хотел бы получить новую матрицу B, которая состоит из все возможной масштабированной комбинации элементов, избегая строки только с одним элементом (тогда, по крайней мере, два элемента для каждой строки), например:

B=[3 4 5 6; 
    3 4 5 0; 
    3 4 0 0; 
    0 4 5 6; 
    0 0 5 6; 
    3 0 5 6; 
    3 0 5 0; 
    0 0 5 6; 
    3 4 0 6; 
    0 4 0 6; 
    3 4 0 0; 
    etc... 
]; 

Не могли бы вы помочь мне?

Заранее спасибо

+0

Что вы имеете в виду под "масштабируется"? –

+0

этот термин должен быть ясным, если вы читаете пример – Anassa

+0

. Из примера, кажется, что термин «масштабированный» должен быть удален altogeher. Else, я понятия не имею, что это значит –

ответ

1

Вот способ сделать это:

A = [3 4 5 6]; % data 
N = 2; % minimum number of elements that should be present 
p = dec2bin(1:2^numel(A)-1)-'0'; % binary pattern. Each row is a combination 
s = sum(p,2)>=N; % index to select rows of p that have at least N ones 
result = bsxfun(@times, A, p(s,:)); % multiply with singleton expansion 

Это дает, в вашем примере,

result = 
    0  0  5  6 
    0  4  0  6 
    0  4  5  0 
    0  4  5  6 
    3  0  0  6 
    3  0  5  0 
    3  0  5  6 
    3  4  0  0 
    3  4  0  6 
    3  4  5  0 
    3  4  5  6 
+0

Perfect. большое спасибо – Anassa

Смежные вопросы