<p>numpy.concat이 λΈŒλ‘œλ“œ 캐슀트 μΆ•μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ (Trac # 1518).</p>

에 λ§Œλ“  2012λ…„ 10μ›” 19일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: numpy/numpy

_2010-06-22 trac μ‚¬μš©μž eob의 원본 ν‹°μΌ“ http://projects.scipy.org/numpy/ticket/1518 , unknown에 ν• λ‹Ή 됨 _

두 개의 ν…μ„œλ₯Ό ν•¨κ»˜ μ—°κ²°ν•˜λ €κ³  ν•  λ•Œ μ—°κ²° μž‘μ—…μ„ 톡해 그쀑 ν•˜λ‚˜μ—μ„œ λΈŒλ‘œλ“œ 캐슀트 차원 (newaxis μ‚¬μš©)을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

00 - Bug Other

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” λ‚˜μ—κ²Œ 견고 ν•΄ λ³΄μ΄λŠ” 해결책을 μ°Ύμ•˜λ‹€. np.concatenate(np.broadcast_arrays(*arrays), axis=...) ν˜•μ‹μœΌλ‘œ broadcast_arraysλ₯Ό μ‚¬μš©ν•˜λΌ. 예 : 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_

μ°Έκ³  : μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” ν•΄κ²° 방법은 newaxisλ₯Ό μ‚¬μš©ν•˜λ €λŠ” 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κ°€ μžˆμœΌλ―€λ‘œ μˆ˜λ™ λΈŒλ‘œλ“œ μΊμŠ€νŒ…μ΄ 쑰금 더 μ‰¬μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 단지 μ•½κ°„μ˜ 긍정적 인 κ°•ν™”κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. λˆ„κ΅¬λ“ μ§€ 이것에 λŒ€ν•΄ κ°•ν•œ μ˜κ²¬μ„ 가지고 μžˆλ‹€λ©΄ 자유둭게 λ‹€μ‹œμ—¬μ‹­μ‹œμ˜€.

λ‚˜λŠ” λ‚˜μ—κ²Œ 견고 ν•΄ λ³΄μ΄λŠ” 해결책을 μ°Ύμ•˜λ‹€. np.concatenate(np.broadcast_arrays(*arrays), axis=...) ν˜•μ‹μœΌλ‘œ broadcast_arraysλ₯Ό μ‚¬μš©ν•˜λΌ. 예 : 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 λ‚˜λŠ”μ΄ μ†”λ£¨μ…˜μ— λ¬Έμ œκ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ (그리고이 μŠ€λ ˆλ“œμ˜ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ œμ•ˆν•œ 일반적으둜 μˆ˜λ™ 방솑). μš°λ¦¬κ°€ μ—°κ²°ν•˜λŠ” μ°¨μ›μ—μ„œ λ°©μ†‘ν•˜λŠ” 것은 λ§μ΄λ˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 즉, κ·€ν•˜μ˜ κ²½μš°μ—λŠ” ν•˜λ‚˜μ˜ 0 μ—΄λ‘œ 끝날 κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒλ„μ΄ 문제λ₯Ό λ°œκ²¬ν•˜λ©΄ μ—°κ²°λœ λΈŒλ‘œλ“œ μΊμŠ€νŒ… μ†”λ£¨μ…˜μ„ κ²€μƒ‰ν•˜λŠ” λ™μ•ˆ λ‚΄ μ†”λ£¨μ…˜μ„ https://stackoverflow.com/questions/56357047/concatenate-with-broadcast/61061019#61061019에 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰