<p>numpy.concat рдкреНрд░рд╕рд╛рд░рдг рдЕрдХреНрд╖реЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (Trac # 1518)</p>

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

_рдСрд░рд┐рдЬрд┐рдирд▓ рдЯрд┐рдХрдЯ http://projects.scipy.org/numpy/ticket/1518 2010-06-22 рдХреЛ trac user eob рджреНрд╡рд╛рд░рд╛, рдЕрдЬреНрдЮрд╛рдд рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ ред_

рдЬрдм рдореИрдВ рджреЛ рдЯреЗрдирд╕рд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдХреЙрдиреНрдЯреЗрдиреЗрдЯ рдСрдкрд░реЗрд╢рди рдореБрдЭреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рдг рдЖрдпрд╛рдо (newaxis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдареЛрд╕ рд▓рдЧрддрд╛ рд╣реИ ... рдмрд╕ np.concatenate(np.broadcast_arrays(*arrays), axis=...) рдХреЗ рд░реВрдк рдореЗрдВ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ_рд░реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Ex: 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 рдпреВрдЬрд░ рдИрдУрдмреА рдиреЗ 2010-06-22_ рдкрд░ рд▓рд┐рдЦрд╛

рдиреЛрдЯ: рд╣рдо рдЬрд┐рд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ numpy.array рдХреЛ рдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо newaxis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдХреА рдХреАрдордд рдкрд░ред

_ @ 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 рдкреНрд░рд╕рд╛рд░рдг рдкрд░ рдХреЛрдИ рд╕рдорд╛рдЪрд╛рд░ / рдкреНрд░рдЧрддрд┐?

рдЕрддреАрдд рдореЗрдВ рд╕реВрдЪреА рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдПрдВ рд╣реБрдИ рд╣реИрдВ, рдФрд░ рд╕рд╛рдореВрд╣рд┐рдХ рдЬреНрдЮрд╛рди рдиреЗ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдХрд┐ рдПрдХ рд╕реБрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдПрдХ рд╕реБрд░реАрд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдкреНрд░рд╕рд╛рд░рдг рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдереАред рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЙрд╕ рдмрд╛рддрдЪреАрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╣реА рдЬрдЧрд╣ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд╣реЛрдЧреА, рдпрд╣рд╛рдВ рдирд╣реАрдВред

рдХреНрдпрд╛ рдЗрд╕реЗ "рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдорд╛рдирд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рдкреНрд░рд╕рд╛рд░рдг рдЕрдм рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╕рд╛рд░рдг_рддрдХ рд╣реИред

рдореБрдЭреЗ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕реБрджреГрдвреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдордЬрдмреВрдд рд░рд╛рдп рд╣реИ, рддреЛ рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдареЛрд╕ рд▓рдЧрддрд╛ рд╣реИ ... рдмрд╕ np.concatenate(np.broadcast_arrays(*arrays), axis=...) рдХреЗ рд░реВрдк рдореЗрдВ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ_рд░реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Ex: 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/6n61019#61061019 рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред

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

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

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

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

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

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

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