1. 다음 용어를 설명하라
-단위 행렬: 곱셈에 대해 항등원 역할을 하는 정방행렬입니다.
어떤 행렬 A에 단위행렬 I을 곱해도 원래 행렬 A가 그대로 나옵니다.
-역행렬: 어떤 행렬을 되돌리는 역할을 하는 행렬입니다.
행렬 A가 어떤 벡터를 변환했다면, 그 결과에 역행렬을 곱하면 원래 벡터로 되돌릴 수 있습니다.
-전치행렬: 행과 열을 바꾼 행렬입니다.
행렬 A를 전치하면, 행렬의 i행 j열 -> j행 i열로 바뀝니다.
2. 행렬 연산할때 넘파이함수가 파이썬 함수보다 속도가 빠른 이유를 설명하라.
NumPy는 C언어로 구현되어 있고, 벡터 행렬 연산을 최적화된 저수준 코드로 한 번에 처리하기 때문입니다.
3. 여러 개의 좌표환을 적용할 때 변환의 순서를 변경하면 어떻게 되는가?
-변환의 순서를 바꾸면 일반적으로 결과가 달라집니다.
행렬 곱셈은 비가환 연산이기 때문입니다.
4. Numpy를 이용하여 점 (1,2,3)을 x 축을 기준으로 90도 회전 -> 5배확대 -> x,y,z축으로 (10,10,10)만큼 평행이동 후 점을 구하라.
import numpy as np
#점 1,2,3
point = np.array([1,2,3,1])
rotate = np.pi /2
T1 = np.array([
[np.cos(rotate),-np.sin(rotate),0,0],
[np.sin(rotate),np.cos(rotate),0,0],
[0,0,1,0],
[0,0,0,1]
])
T2 = np.array([
[5,0,0,0],
[0,5,0,0],
[0,0,5,0],
[0,0,0,1]
])
T3 = np.array([
[1,0,0,10],
[0,1,0,10],
[0,0,1,10],
[0,0,0,1]
])
X1 = np.dot(T1,point)
print("X1: \n",X1)
x2 = np.dot(T2,X1)
print("X2: \n",x2)
x3 = np.dot(T3,x2)
print("x3: \n",x3)
T1inv = np.linalg.inv(T1)
T2inv = np.linalg.inv(T2)
T3inv = np.linalg.inv(T3)
Tinv = T1inv@T2inv@T3inv
X = np.dot(Tinv,x3)
print("X:\n",X)
5. Numpy를 이용하여 점 (1,2,3)을 x,y,z축으로 (10,10,10)만큼 평행이동 -> 5배확대-> x축을 기준으로 90도 회전한 점을 구하라
import numpy as np
#점 1,2,3
point = np.array([1,2,3,1])
rotate = np.pi /2
T1 = np.array([
[1,0,0,10],
[0,1,0,10],
[0,0,1,10],
[0,0,0,1]
])
T2 = np.array([
[5,0,0,0],
[0,5,0,0],
[0,0,5,0],
[0,0,0,1]
])
T3 = np.array([
[np.cos(rotate),-np.sin(rotate),0,0],
[np.sin(rotate),np.cos(rotate),0,0],
[0,0,1,0],
[0,0,0,1]
])
X1 = np.dot(T1,point)
print("X1: \n",X1)
x2 = np.dot(T2,X1)
print("X2: \n",x2)
x3 = np.dot(T3,x2)
print("x3: \n",x3)
T1inv = np.linalg.inv(T1)
T2inv = np.linalg.inv(T2)
T3inv = np.linalg.inv(T3)
Tinv = T1inv@T2inv@T3inv
X = np.dot(Tinv,x3)
print("X:\n",X)
6. Numpy를 이용하여 점 (1,0,0)을 z축을 기준으로 90도 회전-> x 축으로 90도 회전-> y축으로 90도 회전 후 점을 구하라
import numpy as np
point = np.array([1,0,0,1])
#z
T1 = np.array([
[np.cos(90),-np.sin(90),0,0],
[np.sin(90),np.cos(90),0,0],
[0,0,1,0],
[0,0,0,1]
])
#x
T2 = np.array([
[1,0,0,0],
[0,np.cos(90),-np.sin(90),0],
[0,np.sin(90),np.cos(90),0],
[0,0,0,1]
])
#y
T3 = np.array([
[np.cos(90),0,-np.sin(90),0],
[0,1,0,0],
[np.sin(90),0,np.cos(90),0],
[0,0,0,1]
])
mix = T1@T2@T3
result = mix@point
print("최종좌표ㅣ",np.round(result[:3],3))
7. Numpy를 이용하여 점 (1,0,0)을 z축을 기준으로 45도 회전 -> x축 으로 45도 회전 -> y축으로 45도 회전 후 점을 구하라.'
import numpy as np
point = np.array([1,0,0,1])
#z
z = np.array([
[np.cos(45),-np.sin(45),0,0],
[np.sin(45),np.cos(45),0,0],
[0,0,1,0],
[0,0,0,1]
])
#x
x = np.array([
[1,0,0,0],
[0,np.cos(45),-np.sin(45),0],
[0,np.sin(45),np.cos(45),0],
[0,0,0,1]
])
#y
y = np.array([
[np.cos(45),0,-np.sin(9450),0],
[0,1,0,0],
[np.sin(45),0,np.cos(45),0],
[0,0,0,1]
])
mix = z@x@y
result = mix@point
print("최종좌표ㅣ",np.round(result[:3],3))