2017-07-25 5 views
-2

Je veux obtenir les indices des lignes qui se croisent d'une principale numpy tableau 2D A, avec un autre B.Indices de l'intersection des lignes de Numpy 2d Tableau

A = array([[1,2], 
      [1,3], 
      [2,3], 
      [2,4], 
      [2,5], 
      [3,4] 
      [4,5]]) 

B = array([[1,2], 
      [3,2], 
      [2,4]]) 

result=[0, -2, 3] 
##Note that the intercept 3,2 must assign (-) because it is the opposite 

Lorsque cela devrait revenir [0, -2 , 3] basé sur les indices du tableau A.

Merci!

Répondre

0

Vous pouvez référencer le code.

import numpy as np 
A = np.array([[1,2], 
      [1,3], 
      [2,3], 
      [2,4], 
      [2,5], 
      [3,4], 
      [4,5]]) 

B = np.array([[1,2], 
      [3,2], 
      [2,4]]) 

result=[] 

for i in range(0, len(A)): 
    for j in range(0, len(B)): 
     if A[i].tolist() == B[j].tolist(): 
      result.append(i) 
     if A[i].tolist()[::-1] == B[j].tolist(): 
      result.append(-i) 
print(result) 

La sortie est:

[0, -2, 3] 
+0

Très bon !, mais j'ai un tableau avec 50 mille lignes, cette boucle devient impossible pour un si grand tableau, je vous remercie! –

0

Le paquet numpy_indexed (disclaimer: Je suis son auteur) a des fonctionnalités pour résoudre efficacement ces problèmes.

import numpy_indexed as npi 
A = np.sort(A, axis=1) 
B = np.sort(B, axis=1) 
result = npi.indices(A, B) 
result *= (A[:, 0] == B[:, 0]) * 2 - 1 
+0

Merci, cela fonctionne vraiment pour mon cas, mais les résultats sont tous négatifs, seuls ceux qui sont inversés devraient être négatifs, comment puis-je résoudre ce problème? –

+0

Le == devrait être évalué avant les sortes –