np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True
np.unique(ar, return_index, return_inverse, return_counts)
np.unique(ar, return_index, return_inverse, return_counts)
ndarray
ถ้าเรียกแบบพื้นฐาน np.unique(arr) คืน ndarray ของค่า unique เรียงแล้วครับ แต่ถ้าใส่ return_counts=True หรือ return_index=True จะคืน tuple แทน — ต้อง unpack ก่อนใช้งาน เช่น unique_vals, counts = np.unique(arr, return_counts=True)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| ar | array_like | Yes | array input ที่ต้องการหาค่า unique — ถ้าไม่ใช่ ndarray จะ flatten ให้อัตโนมัติก่อนประมวลผล | |
| return_index | bool | Optional | False | ถ้า True จะคืน tuple เพิ่ม array ของ index ตำแหน่งที่เจอค่า unique แต่ละตัวครั้งแรกใน ar |
| return_inverse | bool | Optional | False | ถ้า True จะคืน tuple เพิ่ม array ที่ map ตำแหน่งใน ar กลับไปยัง index ใน unique array ใช้สร้าง ar คืนจาก unique ได้ |
| return_counts | bool | Optional | False | ถ้า True จะคืน tuple เพิ่ม array นับว่าค่า unique แต่ละตัวปรากฏกี่ครั้งใน ar — เหมือน COUNTIF ของ Excel |
np.unique(arr)np.unique(arr)
[1 2 3 4 5 6 9]
countscounts
[2 1 2 1 3 1 1]
np.unique(categories)np.unique(categories)
['ปลา' 'หมู' 'ไก่']
len(np.unique(scores))len(np.unique(scores))
5
คล้ายกันมากครับ แต่ต่างกันสองเรื่อง — อย่างแรก np.unique เรียง array ให้อัตโนมัติ แต่ UNIQUE ของ Excel รักษาลำดับของค่าที่ปรากฏครั้งแรก อย่างที่สอง np.unique เอาไว้กับ array 1D เป็นหลัก ถ้าต้องการรักษาลำดับแบบ Excel ผมจะใช้ dict.fromkeys() หรือ pandas .unique() แทนครับ
ต้อง unpack tuple ออกมาก่อนครับ เขียนว่า unique_vals, counts = np.unique(arr, return_counts=True) แล้วใช้งานแยกกัน unique_vals[i] คือค่า unique ตัวที่ i และ counts[i] คือจำนวนครั้งที่ค่านั้นปรากฏ ถ้าลืม unpack แล้วเรียก np.unique(arr, return_counts=True)[1] ตรงๆ ก็ได้เหมือนกันครับ
ได้ครับ แต่มีเรื่องต้องระวัง — โดย default จะ flatten array ก่อนแล้วหาค่า unique ของทุก element รวมกัน ถ้าต้องการหา unique แบบรายแถวให้ใส่ axis=0 เช่น np.unique(arr_2d, axis=0) จะคืนแถวที่ไม่ซ้ำกัน ซึ่งใช้ได้ดีกับ structured data ครับ
np.unique คือฟังก์ชันที่ผมเปรียบเทียบกับ UNIQUE ของ Excel 365 ได้เลยครับ — ใส่ array เข้าไป ได้ค่าที่ไม่ซ้ำกลับมาพร้อมเรียงแล้ว
ฟังก์ชันนี้รับ array อะไรก็ได้ (ตัวเลข, string, หลาย dimension) แล้วคืน ndarray ที่มีแต่ค่า unique เรียงจากน้อยไปมาก (สำหรับตัวเลข) หรือ A–Z (สำหรับ string) โดยอัตโนมัติ ไม่ต้อง sort เพิ่มเองครับ
ที่เจ๋งคือมี parameter เสริมสามตัวที่ผมใช้บ่อยมาก — return_counts=True นับความถี่แต่ละค่าให้เลย (เหมือน COUNTIF ใน Excel), return_index=True บอกว่าค่า unique แต่ละตัวเจอครั้งแรกที่ index ไหน, และ return_inverse=True ให้ mapping กลับว่าตัวเดิม index ไหนคือ unique ตัวที่เท่าไหร่ ✨
ส่วนตัวผมใช้ np.unique บ่อยมากตอนทำ data cleaning เช่นดูว่ามี category อะไรบ้างในคอลัมน์ก่อนจะ process ต่อ หรือนับความถี่ด่วนๆ โดยไม่ต้อง import pandas ครับ แต่ถ้าต้องการผลแบบ DataFrame พร้อม sort ตามความถี่ด้วย ผมจะหยิบ .value_counts() ของ pandas แทน