Как переставить столбцы для каждой строки в матрице в MATLAB? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть матрица

  A = [1,2;3,4];

Я хотел бы сгенерировать новую матрицу B, которая содержит все перестановки по столбцам для каждой строки.

 B = [1,2;2,1;3,4;4,3]

Есть ли однострочное решение?

Ответы [ 4 ]

1 голос
/ 01 апреля 2019

Я мог думать только о решении, включающем в себя массивы ячеек, поэтому я не уверен, является ли оно «эффективным» вообще.Также обратите внимание на ограничения perms.

% Input.
A = [1, 2; 3, 4]

% Expected output.
B = [1, 2; 2, 1; 3, 4; 4, 3]

% Calculate output.
C = sortrows(cell2mat(cellfun(@(x) perms(x), mat2cell(A, ones(1, size(A, 1)), 2), 'UniformOutput', false)))

A =
   1   2
   3   4

B =
   1   2
   2   1
   3   4
   4   3

C =
   1   2
   2   1
   3   4
   4   3
0 голосов
/ 01 апреля 2019

Я не мог найти однолинейное решение. Надеюсь, что это достаточно просто:

 A = [1, 2, 3; 4, 5, 6];
 B = [];
 for i=1:size(A,1)
     B = [B ; perms(A(i, :))];
 end
0 голосов
/ 01 апреля 2019

Я нашел решение своего вопроса.

n = 2; % size of permutations
perm_index = perms(1:n); % index of the matrix to perm
perm_length = size(perm_index,1);
data = [3,4;5,6]; 
data_length = size(data,1);
output_length = perm_length* data_length; 
output = reshape(data(:,perm_index), output_length,n);

%Final output 
output = [4,3;6,5;3,4;5,6]
0 голосов
/ 01 апреля 2019

Читать о функции nchoosek

A = [1 2 3 4] ;
B = nchoosek(A,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...