_2010-06-22 trac μ¬μ©μ eobμ μλ³Έ ν°μΌ http://projects.scipy.org/numpy/ticket/1518 , unknownμ ν λΉ λ¨ _
λ κ°μ ν μλ₯Ό ν¨κ» μ°κ²°νλ €κ³ ν λ μ°κ²° μμ μ ν΅ν΄ κ·Έμ€ νλμμ λΈλ‘λ μΊμ€νΈ μ°¨μ (newaxis μ¬μ©)μ μ¬μ©ν μ μμ΅λλ€.
_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μ κ²μνμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λλ λμκ² κ²¬κ³ ν΄ λ³΄μ΄λ ν΄κ²°μ± μ μ°Ύμλ€.
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]])