我有一个矩阵
A = [1,2;3,4];
我想生成一个新的矩阵B,其中包含每一行各列的所有排列。
B = [1,2;2,1;3,4;4,3]
有没有一线解决方案?
答案 0 :(得分:1)
我只能想到一个包含单元阵列的解决方案,因此我不确定这是否“有效”。另外,看看limitations of 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
答案 1 :(得分:0)
我为自己的问题找到了解决方案。
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]
答案 2 :(得分:-1)
我找不到任何一线解决方案。希望这个足够简单:
A = [1, 2, 3; 4, 5, 6];
B = [];
for i=1:size(A,1)
B = [B ; perms(A(i, :))];
end
答案 3 :(得分:-2)
了解函数 nchoosek
A = [1 2 3 4] ;
B = nchoosek(A,2)