How to partition a matrix by sorting a column?

1 visualización (últimos 30 días)
Wan-Yi Chiu
Wan-Yi Chiu el 24 de Feb. de 2024
Movida: Stephen23 el 24 de Feb. de 2024
Dear friends:
I want to parttion a matrix into two submatrix by sorting the third column:
For example, the matrix is as follows:
A= [ 73.90 123.17 1.00;
73.79 121.83 0.00;
70.64 74.46 1.00;
69.74 86.40 0.00]
I need the output as:
A1= [ 73.90 123.17 1.00;
70.64 74.46 1.00]
and
A2= [ 73.79 121.83 0.00;
69.74 86.40 0.00]
Thank you very much.

Respuesta aceptada

Walter Roberson
Walter Roberson el 24 de Feb. de 2024
A= [ 73.90 123.17 1.00;
73.79 121.83 0.00;
70.64 74.46 1.00;
69.74 86.40 0.00]
A = 4×3
73.9000 123.1700 1.0000 73.7900 121.8300 0 70.6400 74.4600 1.0000 69.7400 86.4000 0
u = unique(A(:,3));
A1 = A(A(:,3)==u(2),:)
A1 = 2×3
73.9000 123.1700 1.0000 70.6400 74.4600 1.0000
A2 = A(A(:,3)==u(1),:)
A2 = 2×3
73.7900 121.8300 0 69.7400 86.4000 0

Más respuestas (1)

Voss
Voss el 24 de Feb. de 2024
A= [ 73.90 123.17 1.00;
73.79 121.83 0.00;
70.64 74.46 1.00;
69.74 86.40 0.00]
A = 4×3
73.9000 123.1700 1.0000 73.7900 121.8300 0 70.6400 74.4600 1.0000 69.7400 86.4000 0
C = splitapply(@(x){x},A,findgroups(A(:,end)));
Cell array C contains the matrices you want, A1 and A2
C{:}
ans = 2×3
73.7900 121.8300 0 69.7400 86.4000 0
ans = 2×3
73.9000 123.1700 1.0000 70.6400 74.4600 1.0000
so you don't need to make them separate new variables, but you can
A1 = C{2}
A1 = 2×3
73.9000 123.1700 1.0000 70.6400 74.4600 1.0000
A2 = C{1}
A2 = 2×3
73.7900 121.8300 0 69.7400 86.4000 0

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by