Suhwanc

어제 numpy를 처음 보고, 몇몇 함수들을 찾아보니 vector, matrix 관련한 식을 계산하는데

정말 유용하고 말도안되는 함수들이라서 깜짝 놀랐다.

그래서 까먹지 않기 위해 몇 가지 골라서 정리를 해본다.

 

1. 기초 함수들

 

아래 함수들은 "import numpy as py"가 위에 쓰여있다고 가정하고, 작성했습니다!

  • np.array(arr) : 인자로 들어오는 "[]" 모양 리스트를 vector space로 만들어준다. 인자로 리스트를 직접 만들어줘도 되고, 리스트 변수를 인자에 넣어줘도 된다.

  • np.full(arr_size, value) : 배열의 크기(arr_size)만큼 값(value)을 꽉 채워 넣어준다. arr_size에 들어가는 값이 다차원 배열이어도 된다.

  • np.zeros(size), np.ones(size) : size만큼 0 또는 1을 꽉 채워준다.

  • np.arrange(start, end) : start ~ end-1까지 원소를 오름차순으로 넣어준다. 만약 start, end가 아니고 인자를 하나만 넣을 경우 0~n-1까지 원소를 오름차순으로 정렬해준다.

  • np.linspace(start, end, space) : start ~ end까지 수를 형성하되 space개만 형성하도록 일정한 간격을 유지한 채 배열을 만들어준다.

 

2. vector 연산

vector a, vector b가 있을 때 vector 간의 연산에 대해 간단히 알아보자

 

  • 합, 차 : a + b, a - b

  • 스칼라 곱 : n * a, n * b

  • dot product(내적) : np.dot(a, b)

  • cross product(외적) : np.cross(a, b)

 

 

3. 벡터 변환, 좌표 변환

이번엔 두 벡터 사이의 연관성을 파악해 벡터를 변환하고자 한다.

연관성을 파악하는 것은 간단하다.

 

임의의 n차원 벡터 a, b 가 있다고 하자.

한 벡터(a)에 임의의 기저 변환 행렬(p)을 곱해서 다른 벡터(b)가 나올 수 있다면,

임의의 기저 변환 행렬 p는 벡터 b에서 벡터 a로 가는 기저 변환 행렬이 될 것이다.

(참조)

http://blog.naver.com/gdpresent/220595935065

 

따라서 AP = B 이면 P = (A^-1) B로 나타낼 수 있고

이제 p를 이용하여 벡터 b에 속한 좌표를 a에 대한 좌표로 바꿀 수 있게 된다.

반대로 a에서 b로 바꿀 기저 변환 행렬은

BP = A이고, P = (B^-1) A 가 된다.

 

 

그렇다면 numpy에서 위의 계산을 표현해보기 전에,

numpy에는 역행렬을 구할 수 있는 함수가 존재하니, 짚고 넘어가도록 하자.

  • np.linalg.inv(v) : vector v에 대한 역행렬을 구하는 함수이다.

이렇게 역행렬 구하는 함수까지 알아냈으니

기저 변환 행렬은 발로도 구할 수 있다.

작성은 손으로 했습니다.

 

그렇다면 기저 변환 행렬도 구했으니 몇 가지 문제를 풀어보자.

 

  • 1. a에서의 (5,3,1) vector가 b에서 어떻게 표현되는가?

문제에서 주어진 vector와 앞서 구한 b에서 a로 가는 기저 변환 행렬 순서대로

dot product 연산을 수행하면 된다.

음.. 소수점 밑에 자리들이 좀 더러운 듯하다.

 

Numpy array의 각 원소들에 대한 소수점 처리는 어떻게 할까?

 

여러 프로그래밍 언어와 마찬가지로 numpy array 또한 반올림, 올림, 버림이 가능하다.

  • np.round(v, n) : vector v에 대해서 소수점 n째 자리까지 반올림해준다.

  • np.ceil(v) : 소수점 첫째 자리에서 올려 정수형으로 바꾼다.

  • np.trunc(v) : 소수점들을 버린다.

 

마지막으로, trunc 함수를 이용해서 소수점 n째 자리까지 출력하는 것도 가능하다.