2017-04-06 4 views
0

파이썬에서 모양이 잘못 정렬되어 있고 해결 방법을 모르겠습니다. 목표는 배열과 회전 행렬 사이에 내적을 가져 오는 것입니다.파이썬 회전 행렬 오류

두 개의 텍스트 파일 목록을 호출하여 배열로 변환합니다. 두 목록을 배열로 변환 한 다음 행렬 형식으로 올바르게 변환하지 않습니까?

x=dataset[:,0] 
y=dataset[:,1] 
z_nodatum=dataset[:,2] 
stage=dataset[:,17] 
amp=dataset[:,5] 

x=np.array(x) 
y=np.array(y) 

z=-(z_nodatum-2919) 

z=np.array(z) 


A = np.column_stack(([x],[y])) 


theta = np.radians(20) 
c,s =np.cos(theta), np.sin(theta) 
R = np.matrix('{} {};{} {}' .format(c, -s, s, c)) 

B=A*R 

또한 그때 나는 B를 가지고 플로팅 x 및 y 목록에 다시 변환하고 싶습니다.

도움 주셔서 감사합니다. 나는 당신의 dataset 배열을 추측하고있어

답변

1

는 2 차원 배열이며,뿐만 아니라 즉, 은 아마 이미 NumPy와 배열입니다 그 이후 할 수 있습니다 통해하지 인덱스 일반 파이썬 배열 [: (튜플)]

는이 다섯 줄

x=dataset[:,0] 
y=dataset[:,1] 
z_nodatum=dataset[:,2] 
stage=dataset[:,17] 
amp=dataset[:,5] 

실제로 dataset에 지정된 컬럼에 해당 나타납니다, 주어진. x, y, z_notatum, stageamp은 이미 1xN 배열입니다.

을 감안할 때이, 선 :

x=np.array(x) 
y=np.array(y) 

가 수행 아무것도, x와 y는 이미 NumPy와 배열입니다. z=-(z_nodatum-2919)은 모든 요소에서 2919를 뺀 후 결과를 무효화하고 실제로 결과가 좋았 으면 결과가되는 배열을 반환합니다. 그러나 다시 z=np.array(z)은 아무 것도하지 않습니다. 처음에는 이미 배열 수가 적습니다.

이 다음 줄은 내가하고 싶지 않을 수도 있습니다. 이 무엇

A = np.column_stack(([x],[y])) 

그것이 1xN 배열 xy의 배열을하고, 열은, 그 스택 [[x1, x2... xn, y1, y2...yn]]되는 끝있다. 당신이 아마 원한했다 : 열 xy[[x1,y1],[x2, y2]...[xn,yn]]의 2D NumPy와 배열을 반환

A = np.column_stack((x,y)) 

. 이 경우 모든 사용자가 X와 함께 할 거라고 당신이 처음에이 작업을 수행 한 수 Y 있습니다 :

가 바로 옆에 있다면 이것은 당신이 첫번째 장소에 함께 x와 y를 준 것
A = dataset[:,:2] 

dataset 서로 (0 소요 -> N-1 열, 여기서 n 여기에 2)

귀하의 회전 행렬은 유효 나타나지만 참고, 당신은 아마 통해 그것을 만든해야

theta = np.radians(20) 
cos_theta,sine_theta =np.cos(theta), np.sin(theta) 
R = np.matrix([[cos_theta, -sine_theta], [sine_theta, cos_theta]]) 

당신만을 더 편리한 경우 문자열 형식 버전을 사용하십시오 (예 : tex 읽기 t 다른 곳에서) 또는 당신은 그것을 필요로하는 복잡한 구조를 가지고 있습니다. 여기서는 그렇지 않습니다.버전에서

B=A*R 

당신은에 대한 1x1xN 순이익 배열을 가지고 있고, 분명히 R.이을위한 2 × 2 작동하지 않을 수 있습니다.

내가 제안한 수정 된 내용으로 내부 크기가 일치하므로 유효한 행 x 열 Nx2 * 2x2 연산을 얻을 수 있습니다. xyB에서 꺼내려면 처음에 수행했던 작업을 수행 할 수 있습니다.이 시점에서 B은 이제 Nx2 numpy 배열입니다 (A * B = C, C 크기는 A.rows X B.cols입니다. , 외부 크기 값) :

x_rotated = B[:,0] 
y_rotated = B[:,1] 

이제 모든 것이 작동합니다. numpy에서 행렬 곱셈에주의하십시오. 값 중 하나 이상이 행렬인지 확인하십시오. 그렇지 않으면 요소 현명한 곱셈을 수행합니다 (R은 행렬입니다). 또한 연산 순서에 따라 방정식의 두 배열 (예 : 배열 * 배열 * 행렬)이 행렬 연산 전에 요소 현자 곱셈을 수행 할 수 있습니다.