Create a permutation of elements in the same position

1 view (last 30 days)
I have coordinates of points x = [x_1 x_2], y =[ y_1 y_2 ] z = [z_1 z_2 ]
I want to create a matrix with all permutation but the coordinates are in the same position
[ x_1 y_1 z_2;
x_1 y_2 z_2;
x_1 y_1 z_1;
x_1 y_2 z_2;
x_2 y_1 z_2;
x_2 y_2 z_2;
x_2 y_1 z_1;
x_2 y_2 z_2; ]
but the coordinates is changing so it can be x,y,z,v,w I want to write it for a general number of coordinates.

Accepted Answer

William Rose
William Rose on 15 Feb 2022
I see that you have already done it for 2 pairs of coordinates. Here is a way to do it for N coordinates.
N=3;
x=rand(1,N); y=rand(1,N); z=rand(1,N);
A=zeros(N^3,3); %initialize array
for i=1:N
for j=1:N
for k=1:N
A(N^2*(i-1)+N*(j-1)+k,:)=[x(i),y(j),z(k)];
end
end
end
Try it. Good luck.

More Answers (2)

Yongjian Feng
Yongjian Feng on 15 Feb 2022
Just 3 for loops.

DGM
DGM on 15 Feb 2022
Edited: DGM on 15 Feb 2022
Consider the example:
% input coordinates
x = [1 2];
y = [11 22];
z = [111 222];
% create the index array
m = (dec2bin(0:7,3) == '1') + 1;
% all combinations in order
xyz = [x(m(:,1)); y(m(:,2)); z(m(:,3))].'
xyz = 8×3
1 11 111 1 11 222 1 22 111 1 22 222 2 11 111 2 11 222 2 22 111 2 22 222
Or more generally:
x = [1 2 3];
y = [11 22 33];
z = [111 222 333];
% create the index array
nx = numel(x);
m = repmat((1:nx)',[nx*2 1]);
m = [repelem(m(1:size(m,1)/nx,1),nx) m];
m = [repelem(m(1:size(m,1)/nx,1),nx) m];
% get the combinations like before
xyz = [x(m(:,1)); y(m(:,2)); z(m(:,3))].'
xyz = 18×3
1 11 111 1 11 222 1 11 333 1 22 111 1 22 222 1 22 333 1 33 111 1 33 222 1 33 333 2 11 111
  3 Comments

Sign in to comment.

Categories

Find more on Cartesian Coordinate System Conversion in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!