większość, jeśli nie wszystkie funkcje w np.char
stosować istniejące str
metod do każdego elementu tablicy. Jest trochę szybszy niż bezpośrednia iteracja (lub vectorize
), ale nie drastycznie.
Nie ma krajarki strunowej; przynajmniej nie przez tego rodzaju imię. Najbliżej indeksowania z plasterka:
In [274]: 'astring'[1:3]
Out[274]: 'st'
In [275]: 'astring'.__getitem__
Out[275]: <method-wrapper '__getitem__' of str object at 0xb3866c20>
In [276]: 'astring'.__getitem__(slice(1,4))
Out[276]: 'str'
Iteracyjny podejście może być z frompyfunc
(który jest także wykorzystywany przez vectorize
)
In [277]: a = numpy.array(['hello', 'how', 'are', 'you'])
In [278]: np.frompyfunc(lambda x:x[1:3],1,1)(a)
Out[278]: array(['el', 'ow', 're', 'ou'], dtype=object)
In [279]: np.frompyfunc(lambda x:x[1:3],1,1)(a).astype('U2')
Out[279]:
array(['el', 'ow', 're', 'ou'],
dtype='<U2')
mogę go postrzegać jako pojedynczej macierzy charakter i warstwę, która
In [289]: a.view('U1').reshape(4,-1)[:,1:3]
Out[289]:
array([['e', 'l'],
['o', 'w'],
['r', 'e'],
['o', 'u']],
dtype='<U1')
Nadal muszę dowiedzieć się, jak przekonwertować go z powrotem na "U2".
In [290]: a.view('U1').reshape(4,-1)[:,1:3].copy().view('U2')
Out[290]:
array([['el'],
['ow'],
['re'],
['ou']],
dtype='<U2')
Początkowy etap widok pokazuje databuffer jako znaków Py3 (te byłyby bajtów w S
lub PY2 przypadku String):
In [284]: a.view('U1')
Out[284]:
array(['h', 'e', 'l', 'l', 'o', 'h', 'o', 'w', '', '', 'a', 'r', 'e', '',
'', 'y', 'o', 'u', '', ''],
dtype='<U1')
Picking 1: 3 kolumny Kwoty do pobrania a.view('U1')[[1,2,6,7,11,12,16,17]]
a następnie zmiana kształtu i widok. Nie wdając się w szczegóły, nie dziwi mnie, że wymaga kopii.
Nie jestem pewien, co to jest pytanie. komu brakuje tej funkcji? –
Wygląda na to, że Numpy 'routines.char' go nie ma. Zmieniłem to pytanie, aby było to bardziej jasne. –
Szukałem również tej funkcji. Myślę, że zawsze używałem jakiejś pętli. – farenorth