Numpy: python3: dtype рдкрд░ рдЕрджреНрд╡рд┐рддреАрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЧрдорди = рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЗрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгрд┐рдпрд╛рдБ (Trac # 2188)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдХреНрддреВре░ 2012  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

_рдСрд░рд┐рдЬрд┐рдирд▓ рдЯрд┐рдХрдЯ http://projects.scipy.org/numpy/ticket/2188 2012-07-23 рдХреЛ @yarikoptic рджреНрд╡рд╛рд░рд╛, рдЕрдЬреНрдЮрд╛рдд рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛

рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ 1.6.2 рдореЗрдВ рднреА):

рдЕрдЧрд░ python2.x рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдкреБрдХрд┐рдВрдЧ рдХреЗ:

$> python2.7 -c 'import numpy as np; print repr(repr(np.unique(np.array([1,2, None, "str"]))))' 
'array([None, 1, 2, str], dtype=object)'

рдирд╛рдпрдм рдореИрдВ рдпрд╣рд╛рдБ рдЕрд▓рдЧ рд░реЗрдкрд░ рдкрд░ рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЕрднреА рддрдХ рджрд░реНрдЬ рдирд╣реАрдВ

рдпрд╣ python3.x рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

$> python3.2 -c 'import numpy as np; print(repr(repr(np.unique(np.array([1,2,None, "str"])))))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.2/dist-packages/numpy/lib/arraysetops.py", line 194, in unique
    ar.sort()
TypeError: unorderable types: int() > NoneType()

рдЬрдм рднреА IMHO рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрджреНрд╡рд┐рддреАрдп () рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрд░реНрде рддрддреНрд╡реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

00 - Bug numpy.core

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рддрдм рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрдм рдкрдВрдбреЛрдВ рдкрд░ рдбреЗрдЯрд╛-рдХреЙрд▓рдо рдХреЗ рдбреАрдХрд╛рдЗрдк "рдСрдмреНрдЬреЗрдХреНрдЯ" рдФрд░ рдЕрдиреБрдкрд▓рдмреНрдз рдорд╛рди рдХреЗ рд╕рд╛рде scikit-learn's LabelEncoder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдирдпрд╛ рд╡рд┐рдЪрд╛рд░?

unique рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛
  • рд╕рдм рдХреБрдЫ рдПрдХ рд╣реИрд╢ рдЯреЗрдмрд▓ рдореЗрдВ рд░рдЦрдирд╛
  • рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл == рддреБрд▓рдирд╛ рдХрд░реЗрдВ

рдХреЗрд╡рд▓ рдЫрдБрдЯрд╛рдИ рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдХреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдЪрд┐рдд рдЧрддрд┐ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЫрдБрдЯрд╛рдИ рдФрд░ рд╕рднреА-рд╡рд┐рд░реЛрдзреА-рд╕рднреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдореЗрдореЛрд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрджрд┐ рдЫрдБрдЯрд╛рдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рддреЛ рдпрд╣ рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди OTOH рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрднреА-рдХрднреА рдЕрдЪрд╛рдирдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕реАрдкреАрдпреВ рдпрд╛ рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдкреИрдЪ рдкрд░ +1 рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдПрдХ рд░рдгрдиреАрддрд┐ = {"рд╕реЙрд░реНрдЯ", "рд╣реИрд╢", "рдмреНрд░реВрдЯрдлреЛрд░реНрд╕"} рд╡рд┐рдХрд▓реНрдк рдХреЛ np.unique рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЬреАрдм рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ :-)

рдкрд╣рд▓реЗ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрд╕рдВрдЧрдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП + рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЛ рдЫрд╛рдВрдЯ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпрд╛ dtype рдСрдмреНрдЬреЗрдХреНрдЯ рдПрд░реЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреЗ cmp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЗрд╕рд▓рд┐рдП __cmp__ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ-рдкрд╣рд▓реЗ рдЖ рд╕рдХрддрд╛ рд╣реИ -рдлрд░реНрд╕реНрдЯ-рдЗрди-рд▓рд╛рдЗрди 'рдЖрджреЗрд╢?
рд▓реЗрдХрд┐рди рддрдм рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдЕрддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рд╛рд╣рдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдпрд╣ int рдФрд░ str рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛрддрд╛ рд╣реИ ... рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЕрдЧрд░ dtype = рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реЗ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ dtypes рдФрд░ 'рдЕрджреНрд╡рд┐рддреАрдп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ '(рд╕рдВрднрд╡рддрдГ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдкреНрд░рддреНрдпреЗрдХ dtype рдХреЗ рднреАрддрд░ рд╕рдВрднрд╡рддрдГ __cmp__ рдмрд┐рдирд╛ dtypes рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ?

рд╕рд┐рд░реНрдл рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдореЗрдВ 'рд╣реИрд╢рд┐рдВрдЧ' рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ:

$> python3.3 -c 'import numpy as np; print(np.array(list(set([1,2,"str", None])), dtype=object))' 
[None 1 2 'str']

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрднреА рдХреНрдпрд╛ рдХрд╣рд╛ :-)

рд▓реЗрдХрд┐рди рдЖрдЧреЗ рд╕реЛрдЪрд╛ рдЫрдБрдЯрд╛рдИ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ dtype = рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ
рд╡реИрд╕реЗ рднреАред рдореИрдВрдиреЗ рд╢рд╛рдпрдж рджрд░реНрдЬрдиреЛрдВ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦреА рд╣реИрдВ рдЬреЛ рдИрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрд▓рдЯреА рд░рдЦреЗрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реЙрд░реНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдЕрджреНрд╡рд┐рддреАрдп рдмрд╕ рд╣реЛрдЧрд╛
рдЪреБрдкрдЪрд╛рдк рдЧрд▓рдд рдЙрддреНрддрд░ рд▓реМрдЯрд╛ рджреЗрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рдмрдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрд╡реА рд╣реИрдВ, рддреЛ рдЖрдк рдпреВрдирд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ (рдЧрд┐рд░рдлреНрддрд╛рд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рддрддреНрд╡реЛрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдзреЛ рд╕рдХрддреЗ рд╣реИрдВред (рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо
рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╣реИрд╢рдЯреИрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ _work_ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рдЪ рдирд╣реАрдВ рд╣реИ
рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдПред) рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП np.unique

рдЯреАрдпреВ рдкрд░, 17 рд╕рд┐рддрдВрдмрд░, 2013 рдХреЛ рд╢рд╛рдо 5:40 рдмрдЬреЗ, рдпрд╛рд░реЛрд╕реНрд▓рд╛рд╡ рд╣реЗрд▓рдЪреЗрдВрдХреЛ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

рдкрд╣рд▓реЗ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрд╕рдВрдЧрдд рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдЖрдЗрдЯрдореНрд╕ (рддрддреНрд╡ рдХреА рдЫрдБрдЯрд╛рдИ рдХрд░рддреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреА _cmp_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдБрдЪреЗрдВ рдирд╣реАрдВ)
dtype object array) рдЗрд╕рд▓рд┐рдП cmp рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЙрдиреНрд╣реЗрдВ рдкреЛрдЬрд┐рд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
'рдкрд╣рд▓реЗ рдЖрдУ-рдкрд╣рд▓реЗ рдкрд╛рдУ' рдХрд╛ рдЖрджреЗрд╢?
рд▓реЗрдХрд┐рди рддрдм рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рд╛рд╣рдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ
рдЕрддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдпрд╣ int рдФрд░ str рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ ... рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ
рдЕрдЧрд░ dtype = рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ
dtypes рдФрд░ 'рдпреВрдирд┐рдХ' (рд╕рдВрднрд╡рдд: рд╕реЙрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдкреНрд░рддреНрдпреЗрдХ dtype рдХреЗ рднреАрддрд░ рд╕рдВрднрд╡рддрдГ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рд╕реАрдПрдордкреА рдмрд┐рдирд╛ dtypes рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHubhttps: //github.com/numpy/numpy/issues/641#issuecomment -24603047 рдкрд░ рджреЗрдЦреЗрдВ
ред

gy ... рдареАрдХ рд╣реИ - рдкрд╛рдпрдерди рдореЗрдВ рдХреНрд░реВрд░ рд╡рд┐рд╡рд░рдг:

def bucketed_unique(a):
    buckets = {}
    for x in a:
        t = type(x)
        if not (t in buckets):
            buckets[t] = bucket = []
        else:
            bucket = buckets[t]
        bucket.append(x)
    out = []
    for bucket in buckets.itervalues():
        # here could be actually set of conditions instead of blind try/except
        try:
            out.append(np.unique(bucket))
        except:
            out.append(np.array(list(set(bucket)), dtype=object))
    return np.hstack(out)
print bucketed_unique([1, 2, 'str', None, np.nan, None, np.inf, int])
[1 2 'str' None <type 'int'> nan inf]

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рдд - рдЧреИрд░-рд╡рд╕реНрддреБ ndarrays рдХреЗ рд▓рд┐рдП рдХреЛрдИ 'рдмрдХреЗрдЯрд┐рдВрдЧ' рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ == рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреА рд╡рд╕реНрддреБ
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ = = рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред (рдЖрд╕рд╛рди рдЙрджрд╛рд╣рд░рдг: 1, 1.0)ред рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ
рдХрд┐рд╕реА рднреА рдорд╛рдирдХ рдЕрдЬрдЧрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд░реВрдкред
17 рд╕рд┐рддрдВрдмрд░ 2013 18:01 рдХреЛ, "рдпрд╛рд░реЛрд╕реНрд▓рд╛рд╡ рд╣рд▓реНрдЪреЗрдВрдХреЛ" рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рдд - рдЧреИрд░-рд╡рд╕реНрддреБ ndarrays рдХреЗ рд▓рд┐рдП рдХреЛрдИ 'рдмрдХреЗрдЯрд┐рдВрдЧ' рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHubhttps: //github.com/numpy/numpy/issues/641#issuecomment -24604740 рдкрд░ рджреЗрдЦреЗрдВ
ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ! рдпрдХреАрди рд╣реИ рдХрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдмрд╛рд▓реНрдЯреА рднрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ ... btw atm рд╕рдорд╕реНрдпрд╛ рдЦреБрдж рдХреЛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИ:

$> python3.3 -c 'import numpy as np; print(np.unique(np.array([1, 1.0, 1+0j], dtype=object)))'  
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/numpy/lib/arraysetops.py", line 194, in unique
    ar.sort()
TypeError: unorderable types: float() > complex()

$> python -c 'import numpy as np; print(np.unique(np.array([1, 1.0, 1+0j], dtype=object)))' 
[1]

рд╣рд╛рд▓рд╛рдВрдХрд┐ 2 рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ - 'рдЕрджреНрд╡рд┐рддреАрдп' рдорд╛рди dtype рддрдм рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ (рдЗрдВрдЯ / рдлреНрд▓реЛрдЯ / рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕) рдХреЗ рдмреАрдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЧреИрд░-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ ... рд╡рд┐рд╖рдо рд╡рд╕реНрддреБ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ dtypes рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ ...

рдпрд╣рд╛рдБ рдкрд░ рдореИрдВрдиреЗ py3 рдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд int / str рдкрд░ argsort рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдпрд╛ рд╣реИ: https://github.com/pydata/pandas/pull/6222/files

рд╡рд╕реНрддреБ dtypes рдореЗрдВ рддрд╛рд░ рд╕реЗ рдкрд╣рд▓реЗ ints рдЖрджреЗрд╢
рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╢рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдпрдереЛрдЪрд┐рдд рдЙрдкрд╡рд╛рд╕ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ

рдкрд╛рдВрдбрд╛ рд╣реИрд╢рдЯреЗрдмрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рдиреА рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реА-рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд / рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдХреЛрдИ рдЗрд╕ рдкрд░ рдЭреВрд▓реЗ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд┐рдХреЙрд░реНрдб dtypes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рддрдм рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрдм рдкрдВрдбреЛрдВ рдкрд░ рдбреЗрдЯрд╛-рдХреЙрд▓рдо рдХреЗ рдбреАрдХрд╛рдЗрдк "рдСрдмреНрдЬреЗрдХреНрдЯ" рдФрд░ рдЕрдиреБрдкрд▓рдмреНрдз рдорд╛рди рдХреЗ рд╕рд╛рде scikit-learn's LabelEncoder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд░рд╛рдирд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ?

рдбреЗрдмрд┐рдпрди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 1.15.4 рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

$> python3 --version
Python 3.6.5

$> PYTHONPATH=.. python3 -c 'import numpy as np; print(np.__version__); print(repr(repr(np.unique(np.array([1,2,None, "str"])))))'                                                                                   
1.15.4
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/numpy/lib/arraysetops.py", line 233, in unique
    ret = _unique1d(ar, return_index, return_inverse, return_counts)
  File "/usr/lib/python3/dist-packages/numpy/lib/arraysetops.py", line 281, in _unique1d
    ar.sort()
TypeError: '<' not supported between instances of 'NoneType' and 'int'

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдмрд╕ рдЗрд╕ рдкрд╛рд░ рдЖрдпрд╛, рдПрдХ рд╡рд╕реНрддреБ рд╕рд░рдгреА рдкрд░ np.unique(x, return_inverse=True) рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _how_ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрдм рдЫрдВрдЯрд╛рдИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИ: рдореИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рдзреАрдореА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред (рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдЕрдХреНрд╕рд░, рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рдмрдЧ рдирд╣реАрдВред рдбреЙрдХреНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ:

рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЗ _sorted_ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

[1, None] рдЬреИрд╕реЗ рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ 3 рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд░рдгреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЫрдВрдЯрд╛рдИ рдЕрдм рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ _not_ рдПрдХ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛ, рдпрд╣ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

MorBilly picture MorBilly  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

astrofrog picture astrofrog  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amuresan picture amuresan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manuels picture manuels  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ