Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เรียง Matrix ตามผลรวมความต่างสัมบูรณ์ของสมาชิกติดกัน

แนวคิด

สำหรับแต่ละแถว คำนวณผลรวมของ |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 ต่ำ = ค่อนข้างเรียบ