Das Problem hier ist die Art Ihres Arrays von Strings.
Wenn ich machen das Array wie:
In [362]: x=np.array(['one','two','three'])
In [363]: x
Out[363]:
array(['one', 'two', 'three'],
dtype='<U5')
In [364]: type(x[0])
Out[364]: numpy.str_
Die Elemente der besonderen Art String sind, implizit gepolstert zu 5 Zeichen (die längste ‚np.char Methoden funktionieren auf diese Art von Array
In [365]: np.char.find(x,'one')
Out[365]: array([ 0, -1, -1])
Aber wenn ich ein Objekt Array machen, die Strings enthält, wird es Ihre Fehler
In [366]: y=np.array(['one','two','three'],dtype=object)
In [367]: y
Out[367]: array(['one', 'two', 'three'], dtype=object)
In [368]: type(y[0])
Out[368]: str
In [369]: np.char.find(y,'one')
...
/usr/lib/python3/dist-packages/numpy/core/defchararray.py in find(a, sub, start, end)
...
TypeError: string operation on non-string array
A Und oft muss ein Objekt-Array als Liste behandelt werden.
In [370]: y
Out[370]: array(['one', 'two', 'three'], dtype=object)
In [371]: [i.find('one') for i in y]
Out[371]: [0, -1, -1]
In [372]: np.array([i.find('one') for i in y])
Out[372]: array([ 0, -1, -1])
Die np.char
Methoden sind praktisch, aber sie sind nicht schneller. Sie müssen immer noch durch das Array iterieren, indem sie auf jedes Element reguläre Zeichenfolgenoperationen anwenden.
Was tun Sie, wenn Sie sie finden wollen? Teile sie? Holen Sie sich den Index? –
Warum nicht nur '[s.find (Muster) für s in A]' und dann haben Sie den Index des ersten Auftretens dieses Musters in jeder Zeichenfolge (-1, wenn das Muster nicht gefunden wird) – ZWiki