Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python: मैट्रिक्स पंक्तियों को लगातार अंतर के योग के अनुसार सॉर्ट करना

Python में मैट्रिक्स (नेस्टेड सूची) की पंक्तियों को, प्रत्येक पंक्ति में लगातार तत्वों के निरपेक्ष अंतर के योग (sum of absolute consecutive differences) के अनुसार सॉर्ट करना।

सूत्र

पंक्ति [a, b, c, d] के लिए: |b-a| + |c-b| + |d-c|

उदाहरण

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("मूल मैट्रिक्स:")
for i, row in enumerate(my_list):
    diff_sum = diff_summation_elem(row)
    diffs = [abs(row[j+1]-row[j]) for j in range(len(row)-1)]
    print(f"  पंक्ति {i}: {row} → अंतर: {diffs} → योग: {diff_sum}")

# सॉर्ट (आरोही: कम अंतर योग पहले)
my_list.sort(key=diff_summation_elem)
print("\nसॉर्ट के बाद (आरोही):")
for row in my_list:
    print(f"  {row} → योग: {diff_summation_elem(row)}")

आउटपुट

मूल मैट्रिक्स:
  पंक्ति 0: [97, 6, 47, 3] → अंतर: [91, 41, 44] → योग: 176
  पंक्ति 1: [6, 88, 3, 26] → अंतर: [82, 85, 23] → योग: 190
  पंक्ति 2: [71, 53, 34, 65] → अंतर: [18, 19, 31] → योग: 68
  पंक्ति 3: [15, 36, 5, 62] → अंतर: [21, 31, 57] → योग: 109

सॉर्ट के बाद (आरोही):
  [71, 53, 34, 65] → योग: 68
  [15, 36, 5, 62] → योग: 109
  [97, 6, 47, 3] → योग: 176
  [6, 88, 3, 26] → योग: 190

फंक्शन के रूप में

def sort_by_consecutive_diff_sum(matrix, reverse=False):
    """लगातार अंतर के योग के अनुसार मैट्रिक्स सॉर्ट करें"""
    def diff_sum(row):
        return sum(abs(row[i+1] - row[i]) for i in range(len(row)-1))
    
    return sorted(matrix, key=diff_sum, reverse=reverse)

# उपयोग
matrix = [
    [97, 6, 47, 3],
    [6, 88, 3, 26],
    [71, 53, 34, 65],
    [15, 36, 5, 62]
]

print("आरोही:", sort_by_consecutive_diff_sum(matrix))
print("अवरोही:", sort_by_consecutive_diff_sum(matrix, reverse=True))

NumPy के साथ (वेक्टराइज़्ड, तेज़)

import numpy as np

def diff_sum_numpy(row):
    arr = np.array(row)
    return np.sum(np.abs(np.diff(arr)))

# 2D सरणी के लिए (सभी पंक्तियाँ समान लंबाई की हों)
matrix_np = np.array([
    [97, 6, 47, 3],
    [6, 88, 3, 26],
    [71, 53, 34, 65],
    [15, 36, 5, 62]
])

# प्रत्येक पंक्ति के लिए अंतर योग
diff_sums = np.sum(np.abs(np.diff(matrix_np, axis=1)), axis=1)
print("पंक्ति अंतर योग:", diff_sums)  # [176 190  68 109]

# सॉर्ट इंडेक्स
sorted_indices = np.argsort(diff_sums)
print("सॉर्ट इंडेक्स:", sorted_indices)  # [2 3 0 1]

sorted_matrix = matrix_np[sorted_indices]
print("सॉर्ट की गई मैट्रिक्स:\n", sorted_matrix)

आउटपुट

पंक्ति अंतर योग: [176 190  68 109]
सॉर्ट इंडेक्स: [2 3 0 1]
सॉर्ट की गई मैट्रिक्स:
 [[71 53 34 65]
 [15 36  5 62]
 [97  6 47  3]
 [ 6 88  3 26]]

व्यावहारिक अनुप्रयोग

  • स्मूथनेस माप: कम अंतर योग = स्मूथ सीक्वेंस
  • सिग्नल प्रोसेसिंग: वेरिएशन/रफनेस मापना
  • टाइम सीरीज़: स्थिरता/अस्थिरता मापना
  • पाथ ऑप्टिमाइज़ेशन: कम "झटके" वाला पाथ चुनना

विविधताएं

1. वर्ग अंतर योग (Sum of Squared Differences)

def squared_diff_sum(row):
    return sum((row[i+1] - row[i])**2 for i in range(len(row)-1))

# यह बड़े अंतर को अधिक दंडित करता है

2. सापेक्ष अंतर (Relative Difference)

def relative_diff_sum(row):
    """प्रतिशत परिवर्तन का योग"""
    total = 0
    for i in range(len(row)-1):
        if row[i] != 0:
            total += abs((row[i+1] - row[i]) / row[i])
    return total

3. दिशा परिवर्तन गिनना

def count_direction_changes(row):
    """बढ़ते से घटते या vice versa में परिवर्तन"""
    if len(row) < 3:
        return 0
    diffs = [row[i+1] - row[i] for i in range(len(row)-1)]
    signs = [1 if d > 0 else (-1 if d < 0 else 0) for d in diffs]
    changes = sum(1 for i in range(len(signs)-1) if signs[i] != 0 and signs[i] != signs[i+1])
    return changes

print("दिशा परिवर्तन:", [count_direction_changes(r) for r in matrix])
  1. - Python में सूची में लगातार तत्वों की जोड़ी

    Python का उपयोग करके डेटा विश्लेषण के दौरान, हमें एक सूची के लगातार तत्वों को जोड़ने की आवश्यकता हो सकती है। इस लेख में हम इसे प्राप्त करने के विभिन्न तरीके देखेंगे।इंडेक्स और रेंज के साथहम सूची तत्वों के लगातार इंडेक्स को एक साथ रखने के लिए एक अभिव्यक्ति डिज़ाइन करेंगे। और फिर इस जोड़ी को लगातार तत

  1. - Python प्रोग्राम में तत्वों की लंबाई के अनुसार सूची को सॉर्ट करें

    हमारे पास स्ट्रिंग की एक सूची है और हमारा लक्ष्य सूची में स्ट्रिंग की लंबाई के आधार पर सूची को सॉर्ट करना है। हमें स्ट्रिंग को उनकी लंबाई के अनुसार आरोही क्रम में व्यवस्थित करना है। हम इसे अपने एल्गोरिदम या Python के अंतर्निहित मेथड sort() या फ़ंक्शन sorted() के साथ key का उपयोग करके कर सकते हैं।आउट

  1. - पायथन प्रोग्राम: एलिमेंट्स की लंबाई के अनुसार लिस्ट को सॉर्ट करना

    यहां हम एक यूजर इनपुट ऐरे का उपयोग करते हैं और हमें एलिमेंट्स की लंबाई के अनुसार लिस्ट को सॉर्ट करना है। यहां हम पायथन इनबिल्ट फंक्शन sorted() का उपयोग करते हैं।उदाहरणInput: [mona, pp, aaa] Lengths are [4, 2, 3] So, the sorted array should be [2, 3, 4] Output: [pp, aaa, mona]एल्गोरिदमचरण 1: लिस्ट एल