np.concatenate ใช้ต่อ array หลายชุดเข้าด้วยกันตามแกนที่กำหนด คล้ายกับที่ pd.concat ทำกับ DataFrame แต่เป็น NumPy version ที่เร็วกว่าและเหมาะกับข้อมูลตัวเลขล้วนๆ ครับ
np.concatenate(arrays, axis)
np.concatenate(arrays, axis)
ndarray
คืนเป็น NumPy ndarray ชุดเดียวที่รวม array ทั้งหมดเข้ากันแล้วครับ เอาไปคำนวณ vectorized ต่อได้ทันที หรือส่งเข้า pandas เป็น column ก็ได้
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| arrays | list | tuple of ndarray | Yes | list หรือ tuple ที่บรรจุ array ทุกตัวที่ต้องการต่อ ต้องครอบด้วยวงเล็บ [] หรือ () เสมอ เช่น [a, b] หรือ (a, b) ทุก array ต้องมีขนาดตรงกันในแกนที่ไม่ได้ต่อ | |
| axis | int | None | Optional | 0 | แกนที่ใช้ต่อ array: 0 = ต่อแนวตั้ง (เพิ่มแถว), 1 = ต่อแนวนอน (เพิ่มคอลัมน์), None = แผ่ทุก array ให้เป็น 1D ก่อนต่อ |
np.concatenate([a, b])np.concatenate([a, b])
[1 2 3 4 5 6]
np.concatenate([top, bottom], axis=0)np.concatenate([top, bottom], axis=0)
[[1 2 3]
[4 5 6]
[7 8 9]]
np.concatenate([left, right], axis=1)np.concatenate([left, right], axis=1)
[[1 2 5 6]
[3 4 7 8]]
np.concatenate([a, b, c])np.concatenate([a, b, c])
[10 20 30 40 50 60]
ถ้าเขียน np.concatenate(a, b) โดยไม่มี list ครอบ NumPy จะตีความว่า b คือ axis ซึ่งเป็น array ไม่ใช่ int จะ error ว่า ‘axis must be an integer’ ครับ วิธีแก้ง่ายมาก แค่เพิ่ม [] เป็น np.concatenate([a, b]) ก็ใช้งานได้เลย ผมเจอ error นี้บ่อยมากช่วงแรกๆ
ต่างกันที่ใช้กับข้อมูลคนละประเภทครับ np.concatenate ใช้กับ NumPy ndarray เหมาะกับข้อมูลตัวเลขล้วนๆ และเร็วกว่า ส่วน pd.concat ใช้กับ pandas DataFrame หรือ Series รองรับ index, column names, และ mixed types ได้ด้วย ผมใช้ np.concatenate ตอนคำนวณ numerical เยอะๆ และ pd.concat ตอนต้องการ label หรือ metadata ด้วยครับ
ได้บางส่วนครับ ต่อ axis ไหนก็แล้วแต่ แกนอื่นที่ไม่ได้ต่อต้องมีขนาดเท่ากันเสมอ เช่น ต่อ axis=0 (แถว) แต่จำนวนคอลัมน์ต้องเท่ากัน ถ้าไม่เท่าก็ error ‘all the input array dimensions except for the concatenation axis must match’ ครับ
np.concatenate คือฟังก์ชันที่ผมใช้ตอนต้องนำ array หลายชุดมาต่อกันเป็นชุดเดียว ไม่ว่าจะต่อในแนวนอนหรือแนวตั้งครับ
จุดที่ต้องระวังคือ argument ตัวแรกไม่ใช่ array หลายตัวแยกกัน แต่เป็น list หรือ tuple ที่ครอบ array ทุกตัวไว้ เช่น np.concatenate([a, b, c]) — ถ้าลืมใส่วงเล็บรอบนอกจะ error ทันที สำหรับ 2D array จะต่อตามแกน axis=0 (เพิ่มแถว) หรือ axis=1 (เพิ่มคอลัมน์) ก็ได้
ที่เจ๋งคือต่อได้พร้อมกันหลาย array ในคำสั่งเดียว เช่น np.concatenate([a, b, c, d]) โดยไม่ต้องเรียกซ้ำ ประหยัดโค้ดและเร็วกว่า loop มากครับ
ส่วนตัวผมมักใช้ np.concatenate ตอนประกอบชุดข้อมูลที่แยกโหลดมาจากหลายไฟล์ หรือตอนรวม array ผลลัพธ์จากหลาย batch เข้าด้วยกัน ถ้า array เป็น 2D และต้องการ shortcut ผมจะใช้ np.vstack (ต่อแถว) หรือ np.hstack (ต่อคอลัมน์) แทนเพราะอ่านง่ายกว่าครับ 😎