2016-07-14 1 views
-2

3 개의 3X3 행렬을 numpy 배열에 저장했습니다. 제품을 가져 와서 회전 행렬을 계산하고 싶습니다.3 행렬의 행렬 곱을 얻으십시오

현재 내가 무엇을하고 있는가하는 것은 rotation_matrix = (a * b * c)하지만,이 행렬 곱셈하는 올바른 방법입니다 나도 몰라 - 내가 또한 rotation_matrix = pre_rotation.dot(result_pre_tilt).dot(post_rotation)

rotation_matrix = np.multiply(result_pre_tilt, pre_rotation, post_rotation)

a = np.array(
[[-0.25091924 0.   -0.  ] 
[-0.   -0.35485339 0.  ] 
[ 0.   0.   0.70710678]]) 

b = np.array(
[[ 0.10040533 -0.   0.  ] 
[ 0.   0.28953198 -0.  ] 
[ 0.   0.   0.31056766]]) 

c = np.array(
[[ 6.12323400e-17 0.00000000e+00 -1.00000000e+00] 
[ 0.00000000e+00 1.00000000e+00 0.00000000e+00] 
[ 1.00000000e+00 0.00000000e+00 6.12323400e-17]]) 
으로 시도 내가 .dot를 사용되어야한다
+0

http://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html –

+1

올바른 결과를 제공합니까? 예가 도움이 될 수 있습니다. '3D 행렬 '은 모호 할 수 있습니다. 모양이 3x3 또는 2x3x4입니까? 또는 다른 것. – hpaulj

+0

* "numpy 배열에 저장된 3D 행렬"* 행렬 또는 ndarray는 * 어떤 * 유형 *입니까? ('type (a)'를 확인하십시오.) 만약 그것들이'matrix' 객체라면,'*'는 행렬 곱셈입니다. 그것들이'numpy.ndarray' 객체라면'*'는 요소 단위의 곱셈입니다. 이 경우에 행렬 곱셈을하기 위해서'dot' 메쏘드를 사용하십시오 :'rotation_matrix = a.dot (b) .dot (c)'. ('dot'도'matrix' 객체와 함께 사용할 수 있습니다.) –

답변

0

이 같은 dot를 사용하여 시도 할 수 있습니다 :

final= numpy.dot(tilt_matrix, (numpy.dot(rotation_matrix, original)) 

고려할 사항 :

  1. numpy.dot 함수,하지 (A.dot(B)를 호출하는 대신 np.dot(A, B)를 호출 할 수 없습니다)하는 방법이다;
  2. 주문 관련 문제 - 올바른 결과를 얻지 못하면 주문을 변경하십시오. 때로는 먼저 번역해야하고 다음으로 회전해야합니다. 때로는 반대입니다. 각 경우에 따라 다릅니다.
  3. 왼쪽 행렬 열 번호는 2D 행렬의 경우 오른쪽 행렬 행 번호와 같아야합니다.
+1

'A'가 numpy 배열 인 경우,'A.dot (B)'는'np.dot (A, B)'와 같습니다. – hpaulj

관련 문제