2017-04-22 1 views
0

J'ai deux tuples imbriqués nommés coord et coord2 et Je veux voir si un ensemble de coordonnées dans le premier match de tuple une autre dans l'autre tuple quelle que soit la indice.Comparaison de deux 2-D tuples avec numpy en Python

Par exemple,

coord[0][1] = 127, 
coord[0][2] = 128, 
coord[0] = 127,128,129.... 
coord[1][0] = 302, 
coord[1] = 302,303,304 .... 

En ce moment, je peux voir si chaque index correspond à l'index de l'autre tuple exactement, mais pas si un jeu existe dans l'autre. Voici mon code:

for i in range(60): 
if (coord[0][i]) == (coord2[0][i]) and (coord[1][i]) == (coord2[1][i]): 
    print(coord[0][i]) 
    print(coord[1][i]) 
    count += 1 
    total += 1 
else: 
    total += 1 

Comment dois-je procéder? Je suis assez nouveau pour l'utilisation de tableaux numpy en python

J'ai écrit un nouveau code comme si,

for i in range(60): 
    if coord2[0][i] and coord2[1][i] in coord: 
     count += 1 
     total += 1 
    else: 
     total += 1 

Dans mon esprit, cela devrait me dire si un ensemble de coordonnées dans la deuxième tuple est dans la première un. Mais je cours dans une erreur en disant, ValueError: La valeur de vérité d'un tableau avec plus d'un élément est ambigu. Utilisez a.any() ou a.all()

+0

Faisons en sorte que la terminologie soit correcte. 'Tuple 2-D' n'est pas clair. Un tuple, comme une liste peut contenir un nombre ou d'autres listes/tuples. Je préfère le terme «liste imbriquée/tuple» plutôt que 2d. Les tableaux 'numpy' peuvent cependant être 2d. Et un tableau créé à partir de tuples imbriqués peut finir par être 2d. Quoi qu'il en soit, au moment où vous indexez 'coord' comme un tuple imbriqué (ou une liste). Est-ce que ça marche pour toi? Qu'est-ce qui, si quelque chose, est faux? – hpaulj

+0

Donc je veux juste savoir si des coordonnées dans le deuxième tuple, coord2, sont dans la première coordonnée de tuple. J'ai écrit un nouveau code qui, je crois, devrait accomplir cela, mais je cours une erreur – goldfarb33

Répondre

0

Si vous voulez simplement savoir si l'une des coordonnées d'une matrice existe dans une autre, alors c'est une façon de le faire.

import itertools 
import numpy 

D'abord nous allons obtenir toutes les combinaisons d'indices possibles pour les matrices

idx = tuple(e for e in itertools.product(range(len(coord)), repeat=2)) 

((0, 0), 
(0, 1), 
(0, 2), 
(0, 3), 
(1, 0), 
(1, 1), 
(1, 2), 
(1, 3), 
(2, 0), 
(2, 1), 
(2, 2), 
(2, 3), 
(3, 0), 
(3, 1), 
(3, 2), 
(3, 3)) 

Alors Comparons les deux matrices indexées et voir si l'un des points existent dans l'autre

coord = np.arange(16).reshape(4,4) 

coord1 = np.random.randint(1, size=(4,4)) 

np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx]) 

array([ True, False, False, False, False, False, False, False, False, 
     False, False, False, False, False, False, False], dtype=bool) 

Modifier : Si vous voulez simplement le nombre d'occurrences alors il devient

np.sum(np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx])) 

>>1 
0

En fait compris.

for i in range(200): 
    if (coord2[0][i]) in coord[0] and coord2[1][i] in coord[1]: 
     count += 1 
     total += 1 
    else: 
     total += 1