Numpy: ΠžΠ¨Π˜Π‘ΠšΠ: np.array Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² спискС массивов с частично ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 23 ΠΌΠ°Ρ€. 2016  Β·  8ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: numpy/numpy

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ numpy.array ΠΈ numpy.asarray ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ спискам массивов: Ссли пСрСчислСнныС массивы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€, список прСвращаСтся Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ массива (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ " Ρ€Π΅ΠΆΠΈΠΌ 1 "). Если Π½Π΅Ρ‚, возвращаСтся массив массивов (Β«Ρ€Π΅ΠΆΠΈΠΌ 2Β»).

Однако ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ numpy.array ΠΈ numpy.asarray Π² Β«Ρ€Π΅ΠΆΠΈΠΌΠ΅ 2Β», ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, зависит ΠΎΡ‚ количСства элСмСнтов Π² массивах. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ элСгантСн ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ полСзности numpy, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

>>> 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Β», Ρ‡Ρ‚ΠΎ здСсь Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π Π•Π”ΠΠšΠ’Π˜Π ΠžΠ’ΠΠ’Π¬: я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ numpy 1.10.4 ΠΈ python 3.4.3.

00 - Bug numpy.core

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ dtype=object Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ - Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
Однако Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ пустого массива позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого:

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

ВсС 8 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, такая Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Π°. ΠœΡ‹ обсудили Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания массивов dtype=object Ссли явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ dtype. IMO np.array([a, b], dtype=object) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ СдинствСнным способом Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ… - ΠΈ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Ρ„ΠΎΡ€ΠΌΡ‹.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ dtype=object Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ - Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
Однако Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ пустого массива позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого:

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

ВсС Π΅Ρ‰Π΅ сущСствуСт Π² 1.14.4

@ppwwyyxx - Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, отчасти ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ это Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, отчасти ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚ΠΎ, с Ρ‡Π΅ΠΌ постоянно ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ, поэтому ΡΡ€ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСвысока (ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ людСй, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ врСмя внСсти свой Π²ΠΊΠ»Π°Π΄ ...).

Но Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ здСсь, Ρ‚Π°ΠΊ это ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. @shoyer упомянул Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π²Π½ΠΈΠΉ запрос Π½Π° явноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ dtype=object Ссли это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС поднятиС TypeError для всСго, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ числовой ΠΈΠ»ΠΈ строковый массив (# 5353). НСдавно я Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ», Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ dtype='structured' , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ строго соблюдал Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ списками, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½Π° элСмСнты массива, ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΊΠ°ΠΊ элСмСнты структурированного 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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

Foadsf picture Foadsf  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Kreol64 picture Kreol64  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

MorBilly picture MorBilly  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

qualiaa picture qualiaa  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ghost picture ghost  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ