Effacer les filtres
Effacer les filtres

Return subscripts of common rows for multi-dimensional matrix?

2 vues (au cours des 30 derniers jours)
Andrew Poissant
Andrew Poissant le 13 Juil 2018
Commenté : dpb le 13 Juil 2018
I have a 8x2 matrix, A, and a 133x2x5 matrix, B. I want to return the the layer in B in which a row in A matches a row in B. How can I do that? I tried using intersect and ismember but have not had any luck thus far. Having a hard time with the matrix being multi-dimensional.
  4 commentaires
Guillaume
Guillaume le 13 Juil 2018
And you don't care about which is the row in B that match a A row in that layer?
Andrew Poissant
Andrew Poissant le 13 Juil 2018
I do not care about that. It can be any row in B in any layer, as long as it matches to a row in A.

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 13 Juil 2018
Modifié(e) : Guillaume le 13 Juil 2018
[row, layer] = ind2sub([size(B, 1), size(B, 3)], find(ismember(reshape(permute(B, [1 3 2]), [], size(B, 2)), A, 'rows')))
If you want just the layers in which any row matches any row of A:
layer = unique(layer)
edit: By the way the logic of this is to reshape B into a two column matrix by vertically concatenating the layers. Then use the traditional ismember(..., 'rows') and finally convert the matched rows back into (row, layer) coordinate.
Another way, avoiding the sub2ind would be:
layer = unique(ceil(find(ismember(reshape(permute(B, [1 3 2]), [], size(B, 2)), A, 'rows')) / size(B, 1)))

Plus de réponses (1)

dpb
dpb le 13 Juil 2018
ix=mod(find(all(ismember(A,B),2)),size(A,3));
  4 commentaires
Andrew Poissant
Andrew Poissant le 13 Juil 2018
Thank you for the answer but I went with dpb's answer because yours was returning 0s.
dpb
dpb le 13 Juil 2018
It is dpb's and it's supposed to be zero...the "fixup" is
ix(ix==0)=size(A,3);
I posted it as much as a lark as anything... :) G's is a much more legible and therefore maintainable approach.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by