2016-02-06 12 views
5

Ho due array 1-d (a e b) contenenti stringhe, che voglio confrontare con gli elementi per ottenere l'output c come mostrato di seguito. Ho provato a convertirlo per impostare e confrontare, tuttavia ciò non fornisce la soluzione corretta. Anche logical_xor non funziona per la stringa. Posso scrivere un ciclo per farlo, ma poi sconfigge lo scopo di usare gli array, quale può essere il modo migliore per farlo senza un ciclo?confronto di una stringa numpy array 1-d elementwise

>> a 
     array(['S', 'S', 'D', 'S', 'N', 'S', 'A', 'S', 'M'], 
      dtype='|S1') 
    >> b 
     array(['T', 'I', 'D', 'N', 'G', 'B', 'A', 'J', 'M'], 
      dtype='|S1') 

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

risposta

3

Basta utilizzare il metodo __eq__ del ndarray, vale a dire ==

>>> a = array(['S', 'S', 'D', 'S', 'N', 'S', 'A', 'S', 'M'], dtype='|S1') 
>>> b = array(['T', 'I', 'D', 'N', 'G', 'B', 'A', 'J', 'M'], dtype='|S1') 
>>> a == b 
array([False, False, True, False, False, False, True, False, True], dtype=bool) 
+0

Aah! ho perso l'opzione più semplice ... Grazie :) –

0

È possibile utilizzare numpy.equal:

import numpy as np 
c = np.equal(a,b) 

O numpy.core.defchararray.equal:

c = np.core.defchararray.equal(a, b) 

EDIT

np.equal è stato deprecated in the last numpy's releases e ora solleva una FutureWarning:

>>> c = np.equal(a,b) 
__main__:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison 
>>> c 
NotImplemented 

L'operatore di uguaglianza == subiranno la stessa sorte np.equal. Quindi ti suggerisco di usare:

c = np.array([a == b], dtype=bool) 
+0

Questo non funziona. Si ottiene l'errore: '' 'FutureWarning: confronto elementwise fallito; restituendo invece lo scalare, ma in futuro eseguirà il confronto elementare NotImplemented''' – luxon

+0

Ok questa è una deprecazione di numpy (si veda [questa roba] (https://docs.scipy.org/doc/numpy/release.html# ID50)). Modifico la mia risposta :) – cromod

Problemi correlati