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

Python में मैट्रिक्स का मूर-पेनरोज़ सूडोइनवर्स निकालें

NumPy का numpy.linalg.pinv() फंक्शन मैट्रिक्स का मूर-पेनरोज़ सूडोइनवर्स (Moore-Penrose pseudoinverse) निकालता है। यह सिंगुलर वैल्यू डीकंपोजिशन (SVD) का उपयोग करता है और गैर-वर्ग, सिंगुलर, या खराब कंडीशन वाले मैट्रिक्स के लिए भी काम करता है।

सिंटैक्स और पैरामीटर्स

numpy.linalg.pinv(a, rcond=1e-15, hermitian=False)
  • a: इनपुट मैट्रिक्स (M, N) आकार का।
  • rcond: छोटे सिंगुलर मानों के लिए कटऑफ थ्रेशोल्ड। डिफ़ॉल्ट 1e-15।
  • hermitian: यदि True, मैट्रिक्स हर्मिटियन माना जाता है।
  • वापसी: सूडोइनवर्स मैट्रिक्स, आकार (N, M)।

उदाहरण: रैंडम 9×6 मैट्रिक्स

import numpy as np

# 9x6 रैंडम मैट्रिक्स (ओवरडिटरमाइंड सिस्टम)
np.random.seed(42)  # पुनरुत्पादन के लिए
arr = np.random.randn(9, 6)

print("मूल मैट्रिक्स आकार:", arr.shape)
print("डायमेंशन्स:", arr.ndim)
print("डेटा टाइप:", arr.dtype)

# सूडोइनवर्स निकालें (आकार 6x9 होगा)
pinv_arr = np.linalg.pinv(arr)
print("\nसूडोइनवर्स आकार:", pinv_arr.shape)

# सत्यापन: A @ A⁺ @ A ≈ A
check = arr @ pinv_arr @ arr
print("A @ A⁺ @ A ≈ A:", np.allclose(check, arr))

# A⁺ @ A @ A⁺ ≈ A⁺
check2 = pinv_arr @ arr @ pinv_arr
print("A⁺ @ A @ A⁺ ≈ A⁺:", np.allclose(check2, pinv_arr))

आउटपुट (नमूना)

मूल मैट्रिक्स आकार: (9, 6)
डायमेंशन्स: 2
डेटा टाइप: float64
सूडोइनवर्स आकार: (6, 9)
A @ A⁺ @ A ≈ A: True
A⁺ @ A @ A⁺ ≈ A⁺: True

लीस्ट स्क्वेयर्स समाधान के रूप में उपयोग

सिस्टम Ax = b के लिए जहां A (M, N) और M > N (अधिक समीकरण, कम अननोन):

# रैंडम टार्गेट वेक्टर
b = np.random.randn(9)

# लीस्ट स्क्वेयर्स समाधान: x = A⁺b
x_lstsq = pinv_arr @ b

# तुलना: np.linalg.lstsq से
x_np, residuals, rank, s = np.linalg.lstsq(arr, b, rcond=None)
print("pinv समाधान:", x_lstsq)
print("lstsq समाधान:", x_np)
print("समान:", np.allclose(x_lstsq, x_np))

rcond पैरामीटर का प्रभाव

# खराब कंडीशन वाला मैट्रिक्स
A = np.array([[1, 2], [2, 4], [3, 6]], dtype=float)  # रैंक 1
print("डिफ़ॉल्ट pinv:\n", np.linalg.pinv(A))
print("rcond=0.1 pinv:\n", np.linalg.pinv(A, rcond=0.1))
print("rcond=1e-5 pinv:\n", np.linalg.pinv(A, rcond=1e-5))

SVD से संबंध

pinv आंतरिक रूप से SVD का उपयोग करता है:

U, s, Vh = np.linalg.svd(arr, full_matrices=False)
# s में छोटे मानों को rcond * max(s) से नीचे सेट करें
s_inv = np.where(s > rcond * s.max(), 1/s, 0)
pinv_manual = (Vh.T * s_inv) @ U.T

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

  • लीस्ट स्क्वेयर्स रिग्रेशन: β = (XᵀX)⁻¹Xᵀy = X⁺y।
  • इमेज रिकंस्ट्रक्शन: इनवर्स प्रॉब्लम्स हल करना।
  • रोबोटिक्स: इनवर्स काइनेमेटिक्स (रिडंडेंट मैनिपुलेटर्स)।
  • सिग्नल प्रोसेसिंग: डीकॉन्वोल्यूशन।

चेतावनी

pinv inv से धीमा है (SVD बनाम LU)। यदि मैट्रिक्स वर्ग और नॉन-सिंगुलर है, तो inv या solve प्राथमिकता दें।

  1. - पायथन में हाइपरबोलिक टैंजेंट की गणना करें

    पायथन नम्पी में हाइपरबोलिक टैंजेंट की गणना करने के लिए numpy.tanh() मेथड का उपयोग करें। यह np.sinh(x)/np.cosh(x) या -1j * np.tan(1j*x) के बराबर है। संबंधित हाइपरबोलिक टैंजेंट मान लौटाता है। यदि x स्केलर है तो यह स्केलर होता है। पहला पैरामीटर x इनपुट ऐरे है। दूसरा और तीसरा पैरामीटर वैकल्पिक हैं। दू

  1. - Python प्रोग्राम में मैट्रिक्स का ट्रांसपोज़ खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक मैट्रिक्स दिया गया है, हमें मैट्रिक्स का ट्रांसपोज़ प्रदर्शित करने की आवश्यकता है। मैट्रिक्स का ट्रांसपोज़ A[i][j] पर मौजूद मान को A[j][i] से बदलकर प्राप्त किया जाता है। आइए नीचे कार्यान्वयन में अवधारणा का न

  1. पायथन प्रोग्राम: मैट्रिक्स का ट्रांसपोज़ ढूंढें पायथन प्रोग्राम: मैट्रिक्स का ट्रांसपोज़ ढूंढें

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट एक मैट्रिक्स दिए जाने पर, हमें ट्रांसपोज़ को उसी मैट्रिक्स में स्टोर करना होगा और इसे प्रदर्शित करना होगा। मैट्रिक्स का ट्रांसपोज़ पंक्तियों को कॉलम में और कॉलम को पंक्तियों में बदलकर