Listing elements from one matrix to another

Hello all,
I have a 500 by 1500 matrix.
As an example I got A, a 3 by 9 matrix. The elements displayed are coordinates in form of x y z x y z ...
A = [ 0 0 0 2 1 0 0 0 0; 1 2 0 0 0 0 3 2 0; 0 0 0 2 3 1 0 0 0 ];
I want all relevant elements (x/=0) now listed as below. Also, I do not want any row containg only zeros.
B = [2 1 0; 1 2 0; 3 2 0; 2 3 1]
The order is not important. It is just important that these x y z coordinates stick together and every new point gets a new row.
What I got so far is following code.
for i=1:size(A,1)
for j=1:3:size(A,2)-2
if A(i,j)>0
B(:,j)=A(i,j);
B(:,j+1)=A(i,j+1);
B(:,j+2)=A(i,j+2);
else ;
end
end
end
As a result I get following code below.
B = [1 2 0 2 3 1 3 2 0]
I noticed, that this loop is overwriting numbers of prevoius rows in the same column.
Kind Regards

 Respuesta aceptada

Gatech AE
Gatech AE el 10 de Dic. de 2019
The formatting in the example you gave us did not translate well; however, the best way to do this can avoid for loops entirely. Using the dimensions of the true matrix, where the columns are a multiple of three, we can do the following.
% Create a column vector of all x,y,z values regardless of matrix size
x = reshape(A(:,1:3:end),[],1);
y = reshape(A(:,2:3:end),[],1);
z = reshape(A(:,3:3:end),[],1);
% Clean up cases where x = 0 with logical indexing, and B is the result of concatenation
mask = x~=0;
B = [x(mask) y(mask) z(mask)];

1 comentario

Enthusiasten
Enthusiasten el 11 de Dic. de 2019
Editada: Enthusiasten el 11 de Dic. de 2019
Thanks four your answer and your explanation. It worked perfectly. I know this was an easy question, but since my brain stuck in for-loops, I forgot to think 'out of the box'.

Iniciar sesión para comentar.

Más respuestas (1)

A = [0 0 0 2 1 0 0 0 0; 1 2 0 0 0 0 3 2 0; 0 0 0 2 3 1 0 0 0];
B=reshape(A',3,[])';
B(sum(B,2)==0,:)=[]

1 comentario

Enthusiasten
Enthusiasten el 11 de Dic. de 2019
Thanks four your answer! It worked like 'Gatech AE' answer perfectly.

Iniciar sesión para comentar.

Categorías

Productos

Preguntada:

el 10 de Dic. de 2019

Editada:

el 11 de Dic. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by