Numpy: рдмрдЧ: np.array рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдорд┐рд▓рд╛рди рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдорд╛рд░реНрдЪ 2016  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рдлрд╝рдВрдХреНрд╢рди numpy.array рдФрд░ numpy.asarray рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ: рдпрджрд┐ рд╕реВрдЪреАрдмрджреНрдз рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдЖрдпрд╛рдо рдФрд░ рдЖрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕реВрдЪреА рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЗ рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ (рдЪрд▓реЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ) рдореЛрдб 1 тАЭ)ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ("рдореЛрдб 2")ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, "рдореЛрдб 2" рдореЗрдВ numpy.array рдФрд░ numpy.asarray рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

>>> a = np.array([1, 2, 3])
>>> b = np.array([[1, 0], [0, 1]])
>>> np.asarray([a, b])
array([array([1, 2, 3]), array([[1, 0],
       [0, 1]])], dtype=object)

рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╣реАрдВ рд╣реИ:

>>> a = np.array([1, 2])
>>> b = np.array([[1, 0], [0, 1]])
>>> np.asarray([a, b])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/dist-packages/numpy/core/numeric.py", line 474, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: could not broadcast input array from shape (2,2) into shape (2)

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдЬрдм numpy.asarray рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдХреА a рдФрд░ b рдореЗрдВ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рд╣реИ, рддреЛ рдпрд╣ "рдореЛрдб 1" рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣рд╛рдВ рдЕрд╕рдВрднрд╡ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ 1.10.4 рдФрд░ рдЕрдЬрдЧрд░ 3.4.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

00 - Bug numpy.core

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

dtype=object рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА - рдЖрдкрдХреЛ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЦрд╛рд▓реА рд╕рд░рдгреА рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдк рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ:

arr_of_arr = np.array([np.array([]), a, b])[1:]

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

рд╕рд╣рдордд, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдордмреИрдХ рддрд░реНрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдХрд┐ рдЬрдм рддрдХ dtype рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рд╣рдо dtype=object рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред IMO np.array([a, b], dtype=object) рдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдФрд░ рдЗрд╕реЗ рдЖрдХрд╛рд░ рдкрд░ рдХреЛрдИ рднреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

dtype=object рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА - рдЖрдкрдХреЛ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЦрд╛рд▓реА рд╕рд░рдгреА рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдк рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ:

arr_of_arr = np.array([np.array([]), a, b])[1:]

1.14.4 рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ

@ppwwyxx - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рддреБрдЪреНрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рд░ рд╕рдордп рд╣рд┐рдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╣реИ (рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИ ...)ред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред @shoyer рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ dtype=object рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдпрджрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЕрдиреНрдпрдерд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП TypeError рдмрдврд╝рд╛, рдЬреЛ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА (# 5353) рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рди рд░реВрдк рд╕реЗ dtype='structured' рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдФрд░ tuples рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд░рдЪрд┐рдд dtype рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдЦреНрддреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдХреБрдЫ рд╕рдВрдХреЗрдд рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл ctors.c рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдирдЬрд░ рд░рдЦрддрд╛ рд╣реИ, рдирд┐рд░реНрдорд╛рддрд╛ рддрд░реНрдХ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдирдкреБрдЯ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реВрдкреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╡рд╣реА рдореБрджреНрджрд╛: # 8330

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ # 11601 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдирд╣реАрдВ рд╣реИред

рддреЛ, рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

a = np.array([1, 2])
b = np.array([[1, 0], [0, 1]])
out = np.asarray([a, b])
# translates to
out = np.empty((2, 2))  #shape is correctly inferred
out[0,:] = a
out[1,:] = b  # error comes from here
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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