แนวคิด
สำหรับแต่ละแถว คำนวณผลรวมของ |row[i+1] - row[i]| สำหรับทุก i แล้วเรียงแถวตามค่านี้จากน้อยไปมาก
ตัวอย่างโค้ด
def diff_summation_elem(row):
"""ผลรวมความต่างสัมบูรณ์ระหว่างสมาชิกติดกัน"""
return sum(abs(row[i+1] - row[i]) for i in range(len(row) - 1))
my_list = [
[97, 6, 47, 3],
[6, 88, 3, 26],
[71, 53, 34, 65],
[15, 36, 5, 62]
]
print("Matrix:", my_list)
my_list.sort(key=diff_summation_elem)
print("เรียงตาม diff sum:", my_list)
ผลลัพธ์
Matrix: [[97, 6, 47, 3], [6, 88, 3, 26], [71, 53, 34, 65], [15, 36, 5, 62]]
เรียงตาม diff sum: [[71, 53, 34, 65], [15, 36, 5, 62], [97, 6, 47, 3], [6, 88, 3, 26]]
คำนวณ diff sum แบบละเอียด
- [71,53,34,65]: |53-71|+|34-53|+|65-34| = 18+19+31 = 68
- [15,36,5,62]: |36-15|+|5-36|+|62-5| = 21+31+57 = 109
- [97,6,47,3]: |6-97|+|47-6|+|3-47| = 91+41+44 = 176
- [6,88,3,26]: |88-6|+|3-88|+|26-3| = 82+85+23 = 190
การประยุกต์
ใช้วัด "ความเรียบ" (smoothness) ของสัญญาณหรือ time series ค่า diff sum ต่ำ = ค่อนข้างเรียบ