można przekonwertować tablicy ciągów do tablicy pływaków (z Nans) używając np.genfromtxt
:
In [83]: np.set_printoptions(precision=3, suppress=True)
In [84]: np.genfromtxt(np.array(['1','2','3.14','1e-3','b','nan','inf','-inf']))
Out[84]: array([ 1. , 2. , 3.14 , 0.001, nan, nan, inf, -inf])
W Python3 trzeba by przekształcić tablicę do bajtów pierwszy, na przykład jak poprzez np.astype()
:
In [18]: np.genfromtxt(np.array(['1','2','3.14','1e-3','b','nan','inf','-inf']).astype('bytes'))
Out[18]: array([ 1. , 2. , 3.14 , 0.001, nan, nan, inf, -inf])
Oto sposób zidentyfikować "numeryczne" ciągi:
In [34]: x
Out[34]:
array(['1', '2', 'a'],
dtype='|S1')
In [35]: x.astype('unicode')
Out[35]:
array([u'1', u'2', u'a'],
dtype='<U1')
In [36]: np.char.isnumeric(x.astype('unicode'))
Out[36]: array([ True, True, False], dtype=bool)
Zauważ, że "numeryczny" oznacza Unicode, który zawiera tylko znaki cyfr - to znaczy, znaki, które mają wartość liczbową Unicode. Nie obejmuje ona , a nie włącznie z kropką dziesiętną. Tak więc u'1.3'
nie jest uważany za "numeryczny".
'np.genfromtxt' jest doskonały, dzięki! – ChrisB
Odpowiedź ta może wymagać zmian dla python3 - Można by dostać 'TypeError: nie można przekonwertować obiekt„bajty”na str implicitly'. –
@ cᴏʟᴅsᴘᴇᴇᴅ: Dzięki za heads-up. Naprawiono za pomocą 'astype ('bytes')'. – unutbu