ndarray
คืนเป็น numpy array ตัวใหม่ (ndarray) ที่เรียงค่าเรียบร้อยแล้วครับ ของเดิมไม่ถูกเปลี่ยน เอาผลลัพธ์ไป index, slice หรือคำนวณต่อได้ทันที
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| a | array_like | array ที่ต้องการเรียง เช่น np.array([3, 1, 2]) จะถูกเรียงจากน้อยไปมาก โดยตัวเดิมไม่ถูกเปลี่ยน คืนเป็น array ใหม่ | |
| [axis]ไม่บังคับ | int | None | -1 | แกนที่ใช้เรียงสำหรับ array หลายมิติ axis=1 เรียงในแต่ละแถว, axis=0 เรียงในแต่ละคอลัมน์ ค่าเริ่มต้น -1 คือแกนสุดท้าย (แถว) ถ้าใส่ None จะ flatten เป็น 1 มิติก่อนเรียง |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
เวลาผมอ่านโค้ด numpy ที่ AI เขียนมา แล้วเจอ np.sort นี่เข้าใจง่ายมากครับ มันก็คือการเรียงข้อมูลนั่นแหละ เหมือนเรากด Data > Sort ใน Excel หรือใช้ฟังก์ชัน SORT เป๊ะๆ
หลักการคือ ส่ง array เข้าไป มันจะเรียงค่าจากน้อยไปมากแล้วคืน array ใหม่ที่เรียงเรียบร้อยกลับมาให้ โดยที่ array ตัวเดิมยังอยู่ครบไม่ถูกเปลี่ยน — จุดนี้สำคัญครับ ใครเผลอคิดว่ามันแก้ของเดิมให้จะงงได้
ที่เจ๋งคือถ้า array เป็นแบบ 2 มิติ (ตาราง) เราระบุ axis ได้ว่าจะเรียงตามแถวหรือตามคอลัมน์ ยืดหยุ่นกว่า Sort ใน Excel อีก แล้วถ้าอยากเรียงจากมากไปน้อย ก็แค่เอา [::-1] ต่อท้ายเพื่อกลับด้าน ง่ายๆ
ส่วนตัวผมใช้ np.sort บ่อยตอนอยากดูค่าสูงสุด-ต่ำสุด หรือเตรียมข้อมูลก่อนหาค่ามัธยฐาน เพราะมันเร็วและเขียนสั้นมากครับ 😎
เคสพื้นฐานสุดครับ ผมส่ง array ที่ค่ามั่วๆ เข้าไป np.sort จัดเรียงให้จากน้อยไปมากเรียบร้อย เหมือนกด Data > Sort Ascending ใน Excel เลย ที่สำคัญตัวแปร a เดิมยังเรียงมั่วเหมือนเดิม ไม่ถูกแก้ครับ
พอเป็นตาราง 2 มิติ ผมใส่ axis=1 เพื่อสั่งให้เรียงค่าในแต่ละแถวแยกกัน แถวบน [3,1,2] กลายเป็น [1,2,3] แถวล่าง [9,7,8] กลายเป็น [7,8,9] ครับ ถ้าอยากเรียงในแนวคอลัมน์แทนก็เปลี่ยนเป็น axis=0
numpy ไม่มี option เรียงมากไปน้อยตรงๆ ครับ ทริคที่ผมใช้คือเรียงน้อยไปมากด้วย np.sort ก่อน แล้วต่อท้ายด้วย [::-1] เพื่อกลับลำดับทั้ง array ก็ได้ผลเรียงจากมากไปน้อยตามต้องการ เหมือน Sort Descending นั่นแหละ
ไม่ครับ np.sort คืน array ใหม่ที่เรียงแล้ว ของเดิมยังอยู่ครบ ถ้าอยากให้แก้ตัวเดิมเลย (in-place) ต้องใช้ a.sort() แบบ method แทน ซึ่งจะเปลี่ยน a ตรงๆ และคืน None มาให้ ส่วนตัวผมชอบ np.sort มากกว่าเพราะปลอดภัยกว่า ไม่เผลอทำข้อมูลต้นฉบับหายครับ
ใช่ครับ numpy ไม่มี argument แบบ descending ตรงๆ เหมือน pandas วิธีมาตรฐานคือเรียงน้อยไปมากด้วย np.sort(a) ก่อน แล้วเอา [::-1] ต่อท้ายเพื่อกลับด้าน เป็นทริคที่ทุกคนใช้กันครับ เขียนสั้นและอ่านง่ายดี
ใช้ np.argsort แทนครับ มันจะคืน index ที่บอกว่าต้องหยิบสมาชิกตำแหน่งไหนมาเรียงก่อนหลัง เหมาะตอนอยากเรียงข้อมูลหลาย array ให้สอดคล้องกันตามค่าใน array หลัก ส่วน np.sort คืนเป็นตัวค่าที่เรียงแล้วเลยครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy sort จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True
df.sort_values() ใน pandas ผมใช้สำหรับเรียงลำดับแถวใน DataFrame ตามค่าของคอลัมน์ที่กำหนด เรียงจากน้อยไปมากหรือมากไปน้อยก็ได้ และยังเรียงตามหลายคอลัมน์พร้อมกันได้ด้วยครับ
np.argmax ผมใช้หา index หรือตำแหน่งของค่าที่มากที่สุดใน array ครับ ย้ำว่ามันคืน "ตำแหน่ง" ไม่ใช่ "ตัวค่า" ถ้าใครเคยใช้ Excel มาก่อน ตัวนี้คือ MATCH(MAX(range), range, 0) นั่นเองครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่