<p>numpy.concat Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ осям ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ (Trac # 1518)</p>

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

_ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ»Π΅Ρ‚ http://projects.scipy.org/numpy/ticket/1518 ΠΎΡ‚ 22.06.2010 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ trac eob, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ unknown._

Когда я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ‚Π΅Π½Π·ΠΎΡ€Π° вмСстС, опСрация объСдинСния Π½Π΅ позволяСт ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСрСния (с использованиСм Π½ΠΎΠ²ΠΎΠΉ оси) Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ….

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

Π― нашСл Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ каТСтся Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ... просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ broadcast_arrays Π² Ρ„ΠΎΡ€ΠΌΠ΅ np.concatenate(np.broadcast_arrays(*arrays), axis=...) . ΠŸΡ€ΠΈΠΌΠ΅Ρ€: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1) β†’ array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

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

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ _trac eob написал 2010-06-22_

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, - это ΠΌΠΎΠ·Π°ΠΈΠΊΠ° numpy.array, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ось, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π·Π° счСт памяти.

_ @ pv написал 2010-06-24_

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, ΠΈ Ρ‡Ρ‚ΠΎ происходит Π½Π° самом Π΄Π΅Π»Π΅.

Из вашСго описания ΠΌΠ½Π΅ Π½Π΅ совсСм понятно, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ.

_ @ pv написал 2010-06-24_

Если Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ это,

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, np.tile(x, (4,1))), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])

ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ:

def broadcast_view(x, ref):
    """Broadcast unit dimensions in `x` to match those in `ref` without copies"""
    strides = [0 if x.shape[j] == 1 else x.strides[j] for j in range(x.ndim)]
    shape = [ref.shape[j] if x.shape[j] == 1 else x.shape[j] for j in range(x.ndim)]
    from numpy.lib.stride_tricks import as_strided
    return as_strided(x, shape=shape, strides=strides)

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, broadcast_view(x[None,:], y)), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])
>>> broadcast_view(x[None,:], y).base.base.base is x
True

Но Π΄Π°, я Π΄ΡƒΠΌΠ°ΡŽ, np.concatenate Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ это автоматичСски.

Π•ΡΡ‚ΡŒ новости / прогрСсс ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ вСщания np.concatenate ?

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π² спискС Π±Ρ‹Π»ΠΎ нСсколько дискуссий, ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π°Π·ΡƒΠΌ подсказывал, Ρ‡Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Π΅ ошибки, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ВСроятно, Π½Π°ΠΌ слСдуСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ это.

Π’ любом случаС, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ снова ΠΎΠΆΠΈΠ²ΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ мСстом Π±ΡƒΠ΄Π΅Ρ‚ список рассылки, Π° Π½Π΅ здСсь.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ это ΠΊΠ°ΠΊ Β«Π½Π΅ исправит»?

Богласовано. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π²Π΅Ρ‰Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ broadcast_to.

МнС просто Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ подкрСплСния, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ катСгоричСски ΠΏΡ€ΠΎΡ‚ΠΈΠ² этого, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ снова.

Π― нашСл Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ каТСтся Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ... просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ broadcast_arrays Π² Ρ„ΠΎΡ€ΠΌΠ΅ np.concatenate(np.broadcast_arrays(*arrays), axis=...) . ΠŸΡ€ΠΈΠΌΠ΅Ρ€: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1) β†’ array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

@davidmashburn Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с этим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ (ΠΈ с Ρ€ΡƒΡ‡Π½ΠΎΠΉ трансляциСй Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π² этой Ρ‚Π΅ΠΌΠ΅). Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл вСсти Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π² Ρ‚ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΡƒΠ΅ΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² вашСм случаС я ΠΎΠΆΠΈΠ΄Π°Π» Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ столбСц Π½ΡƒΠ»Π΅ΠΉ.

Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΈ поискС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для трансляции Π² ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, я размСстил своС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° https://stackoverflow.com/questions/56357047/concatenate-with-broadcast/61061019#61061019

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ