NumPy सरणियों पर कार्रवाई के लिए जानने के लिए महत्वपूर्ण चीजें बनाम NumPy मैट्रिसेस पर संचालन निम्न हैं:
NumPy मैट्रिक्स NumPy सरणी का एक उपवर्ग है
NumPy सरणी संचालन तत्व-वार हैं (एक बार प्रसारण के लिए जिम्मेदार है)
NumPy मैट्रिक्स ऑपरेशन रैखिक बीजगणित के सामान्य नियमों का पालन करते हैं
वर्णन करने के लिए कुछ कोड स्निपेट:
>>> from numpy import linalg as LA
>>> import numpy as NP
>>> a1 = NP.matrix("4 3 5; 6 7 8; 1 3 13; 7 21 9")
>>> a1
matrix([[ 4, 3, 5],
[ 6, 7, 8],
[ 1, 3, 13],
[ 7, 21, 9]])
>>> a2 = NP.matrix("7 8 15; 5 3 11; 7 4 9; 6 15 4")
>>> a2
matrix([[ 7, 8, 15],
[ 5, 3, 11],
[ 7, 4, 9],
[ 6, 15, 4]])
>>> a1.shape
(4, 3)
>>> a2.shape
(4, 3)
>>> a2t = a2.T
>>> a2t.shape
(3, 4)
>>> a1 * a2t # same as NP.dot(a1, a2t)
matrix([[127, 84, 85, 89],
[218, 139, 142, 173],
[226, 157, 136, 103],
[352, 197, 214, 393]])
लेकिन यह ऑपरेशन विफल हो जाता है अगर इन दो न्यूमपी मैट्रिस को सरणियों में बदल दिया जाता है:
>>> a1 = NP.array(a1)
>>> a2t = NP.array(a2t)
>>> a1 * a2t
Traceback (most recent call last):
File "<pyshell#277>", line 1, in <module>
a1 * a2t
ValueError: operands could not be broadcast together with shapes (4,3) (3,4)
हालांकि NP.dot सिंटैक्स का उपयोग सरणियों के साथ काम करता है ; यह कार्य मैट्रिक्स गुणा की तरह काम करता है:
>> NP.dot(a1, a2t)
array([[127, 84, 85, 89],
[218, 139, 142, 173],
[226, 157, 136, 103],
[352, 197, 214, 393]])
तो क्या आपको कभी NumPy मैट्रिक्स की आवश्यकता है? यानी, रैखिक बीजगणित संगणना के लिए एक NumPy सरणी पर्याप्त होगी (बशर्ते आपको सही सिंटैक्स पता हो, यानी, NP.dB)?
नियम से प्रतीत होता है कि यदि तर्कों (सरणियों) में आकार (mxn) एक दिए गए रैखिक बीजगणित ऑपरेशन के साथ संगत है, तो आप ठीक हैं, अन्यथा, NumPy फेंकता है।
एकमात्र अपवाद जो मुझे आया है (वहाँ दूसरों की संभावना है) मैट्रिक्स व्युत्क्रम की गणना कर रहा है ।
नीचे स्निपेट हैं जिसमें मैंने एक शुद्ध रैखिक बीजगणित ऑपरेशन कहा है (वास्तव में, Numpy के रैखिक बीजगणित मॉड्यूल से) और एक NumPy सरणी में पारित किया गया
एक सरणी के निर्धारक :
>>> m = NP.random.randint(0, 10, 16).reshape(4, 4)
>>> m
array([[6, 2, 5, 2],
[8, 5, 1, 6],
[5, 9, 7, 5],
[0, 5, 6, 7]])
>>> type(m)
<type 'numpy.ndarray'>
>>> md = LA.det(m)
>>> md
1772.9999999999995
eigenvectors / eigenvalue जोड़े:
>>> LA.eig(m)
(array([ 19.703+0.j , 0.097+4.198j, 0.097-4.198j, 5.103+0.j ]),
array([[-0.374+0.j , -0.091+0.278j, -0.091-0.278j, -0.574+0.j ],
[-0.446+0.j , 0.671+0.j , 0.671+0.j , -0.084+0.j ],
[-0.654+0.j , -0.239-0.476j, -0.239+0.476j, -0.181+0.j ],
[-0.484+0.j , -0.387+0.178j, -0.387-0.178j, 0.794+0.j ]]))
मैट्रिक्स मानक :
>>>> LA.norm(m)
22.0227
क्यू कारककरण :
>>> LA.qr(a1)
(array([[ 0.5, 0.5, 0.5],
[ 0.5, 0.5, -0.5],
[ 0.5, -0.5, 0.5],
[ 0.5, -0.5, -0.5]]),
array([[ 6., 6., 6.],
[ 0., 0., 0.],
[ 0., 0., 0.]]))
मैट्रिक्स रैंक :
>>> m = NP.random.rand(40).reshape(8, 5)
>>> m
array([[ 0.545, 0.459, 0.601, 0.34 , 0.778],
[ 0.799, 0.047, 0.699, 0.907, 0.381],
[ 0.004, 0.136, 0.819, 0.647, 0.892],
[ 0.062, 0.389, 0.183, 0.289, 0.809],
[ 0.539, 0.213, 0.805, 0.61 , 0.677],
[ 0.269, 0.071, 0.377, 0.25 , 0.692],
[ 0.274, 0.206, 0.655, 0.062, 0.229],
[ 0.397, 0.115, 0.083, 0.19 , 0.701]])
>>> LA.matrix_rank(m)
5
मैट्रिक्स स्थिति :
>>> a1 = NP.random.randint(1, 10, 12).reshape(4, 3)
>>> LA.cond(a1)
5.7093446189400954
उलटा कोहालांकिएक NumPy मैट्रिक्स की आवश्यकता होती है:
>>> a1 = NP.matrix(a1)
>>> type(a1)
<class 'numpy.matrixlib.defmatrix.matrix'>
>>> a1.I
matrix([[ 0.028, 0.028, 0.028, 0.028],
[ 0.028, 0.028, 0.028, 0.028],
[ 0.028, 0.028, 0.028, 0.028]])
>>> a1 = NP.array(a1)
>>> a1.I
Traceback (most recent call last):
File "<pyshell#230>", line 1, in <module>
a1.I
AttributeError: 'numpy.ndarray' object has no attribute 'I'
लेकिन मूर-पेनरोज़ स्यूडोइनवेरस ठीक काम करने लगता है
>>> LA.pinv(m)
matrix([[ 0.314, 0.407, -1.008, -0.553, 0.131, 0.373, 0.217, 0.785],
[ 1.393, 0.084, -0.605, 1.777, -0.054, -1.658, 0.069, -1.203],
[-0.042, -0.355, 0.494, -0.729, 0.292, 0.252, 1.079, -0.432],
[-0.18 , 1.068, 0.396, 0.895, -0.003, -0.896, -1.115, -0.666],
[-0.224, -0.479, 0.303, -0.079, -0.066, 0.872, -0.175, 0.901]])
>>> m = NP.array(m)
>>> LA.pinv(m)
array([[ 0.314, 0.407, -1.008, -0.553, 0.131, 0.373, 0.217, 0.785],
[ 1.393, 0.084, -0.605, 1.777, -0.054, -1.658, 0.069, -1.203],
[-0.042, -0.355, 0.494, -0.729, 0.292, 0.252, 1.079, -0.432],
[-0.18 , 1.068, 0.396, 0.895, -0.003, -0.896, -1.115, -0.666],
[-0.224, -0.479, 0.303, -0.079, -0.066, 0.872, -0.175, 0.901]])