There are two arrays: A with 8916x3 and B with 6571x3. Each 1x3 set represents xyz coordinates. Array A has some extra coordinates/rows.
I want to compare xyz row by row, and return the index of rows in A that do not exist in B. Then use this index to remove the corresponding extra data from array C (basically C is 8916x3 and it has to be 6571x3 same as B, while keeping the order of rows).
Here's my code but I ge this error: "too many outputs"
[logic,index] =not(ismember(A,B,'rows'))
C(index,:) = [];

 Réponse acceptée

Consider:
% example arrays
B = randi(99,5,3)
B = 5×3
78 21 35 61 79 55 47 76 4 33 86 80 72 26 38
A = [B; randi(99,3,3)];
A = A(randperm(size(A,1)),:)
A = 8×3
78 21 35 61 79 55 10 40 11 55 76 42 50 65 26 72 26 38 47 76 4 33 86 80
% i'm assuming C is some separate array?
C = rand(size(A))
C = 8×3
0.5299 0.1604 0.0717 0.6433 0.3189 0.3384 0.6323 0.7470 0.2365 0.1172 0.1725 0.8113 0.3856 0.8772 0.6111 0.0621 0.1053 0.8808 0.9019 0.1290 0.7942 0.0757 0.7127 0.5547
% extract rows from C where A is a member of B, preserving order
C = C(ismember(A,B,'rows'),:)
C = 5×3
0.5299 0.1604 0.0717 0.6433 0.3189 0.3384 0.0621 0.1053 0.8808 0.9019 0.1290 0.7942 0.0757 0.7127 0.5547

Plus de réponses (0)

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by