2016-02-06 12 views
5

Ich habe zwei 1-d-Arrays (a und b) mit Strings, die ich elementweise vergleichen möchte, um die Ausgabe c wie unten gezeigt zu erhalten. Ich habe versucht, es zu setzen und zu vergleichen, aber das gibt nicht die richtige Lösung. Auch logic_xor funktioniert nicht für string. Ich kann eine Schleife schreiben, um dies zu tun, aber dann vereitelt es den Zweck der Verwendung von Arrays. Was kann der beste Weg sein, dies ohne eine Schleife zu tun?Vergleichen eines Strings 1-d Numpy Array elementweise

>> 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) 

Antwort

3

Gerade die __eq__ Methode des ndarray verwenden, das heißt ==

>>> 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! verpasste die einfachste Option ... Danke :) –

0

Sie numpy.equal verwenden können:

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

Oder numpy.core.defchararray.equal:

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

EDIT

np.equal hat deprecated in the last numpy's releases gewesen und wirft jetzt ein 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 

Der Gleichheitsoperator == wird das gleiche Schicksal wie np.equal leiden. Also schlage ich vor:

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

Das funktioniert nicht. Sie erhalten den Fehler: '' '' FutureWarning: elementweiser Vergleich fehlgeschlagen; Es wird stattdessen ein Skalar zurückgegeben, aber in der Zukunft wird ein elementweiser Vergleich durchgeführt. NotImplemented''' – luxon

+0

Ok, dies ist eine Abwertung von numpy (siehe [dieses Zeug] (https://docs.scipy.org/doc/numpy/release.html#) id50)). Ich bearbeite meine Antwort :) – cromod

Verwandte Themen