A.I
및 numpy.linalg.inv
은 동일하지 않습니다.
A.I
는 matrix.getI 호출 property이다 그래서
def getI(self):
M,N = self.shape
if M == N:
from numpy.dual import inv as func
else:
from numpy.dual import pinv as func
return asmatrix(func(self))
getI
어느 numpy.dual.inv (곱셈 정방 행렬의 역) 또는 numpy.dual.pinv (무어 - 펜로즈 사이비 - 역변환)의 형상에 따라 호출 매트릭스. 당신이 (dual.py에서) 정의를 통해 추적 경우
, 당신은 numpy.dual.inv
가 numpy.linalg.inv
및 numpy.dual.pinv
이 numpy.linalg.pinv
인 것을 확인할 수 있습니다. 또한
In [69]: s = np.random.random((3,4))
In [70]: t = np.matrix(s)
In [71]: t.I
Out[71]:
matrix([[ 1.09509751, -0.56685735, 0.51704085],
[-1.59777153, 0.2777383 , 1.25579378],
[ 0.81899054, 0.7594223 , -0.82760378],
[ 0.02845906, 0.50418885, -0.2091376 ]])
In [72]: np.linalg.inv(t)
...
LinAlgError: Array must be square
,
np.linalg.inv
을 배열 NumPy와 (과 돌려 NumPy와 배열)과 매트릭스를 적용 할 NumPy와 적용될 수있다.
matrix.I
속성은 numpy 행렬에만 적용되며 다른 numpy 행렬을 반환합니다.
A.I
같은
In [60]: x = np.random.random((3,3))
In [62]: y = np.matrix(x)
In [64]: type(y.I)
Out[64]: <class 'numpy.matrixlib.defmatrix.matrix'>
In [65]: type(np.linalg.inv(x))
Out[65]: <type 'numpy.ndarray'>
속성은, 문법적 특성처럼 보이지만 실제로는 (이 경우, A.getI
에서) 함수를 호출합니다. 따라서 역함수의 값은 저장되지 않습니다. 파이썬이 A.I
을 평가할 때마다 함수 A.getI()
이 호출되고 함수의 결과가 리턴됩니다.
속성에 대한 자세한 정보는 Properties: attributes managed by get/set methods을 참조하십시오.
+1 자세한 대답은 OP의 주된 관심사 인 것처럼 보였습니다. AI가 저장된 값처럼 보이더라도 액세스 할 때마다 즉시 계산됩니다. 그것. 따라서 정사각형 행렬의 경우 정확히 동일한 연산을위한 구문 식 설탕입니다. – Jaime
@Jamie : 고마워, 나는 그 질문에 대해 잊어 버렸다. 나는 (희망적으로) 그것을 바로 잡기 위해 마지막에 약간을 추가했다. – unutbu
감사합니다! 귀하의 답변은 매우 유용하고 간결합니다! attrubutes 및 get/set 메소드에 대해 읽어보십시오. 나는 왜 행렬의 역함수를 찾는 것이 get/set 속성을 사용하는지 이해하지 못한다. 그냥'xI()'를 만드는 것이 논리적 인 것처럼 보입니다.'xI'가보기에 더 즐겁다 고 생각되지만, 다음은 대괄호를 넣을 지 여부를 기억해야한다는 것입니다. –