고등학교 때까지 "위치,속도, 힘 등과 같이 크기와 방향성을 갖는 물리량"이라고 배웠다.
그런데 프로그램을 하다보면 벡터라는 용어가 또 등장한다.
파이썬에서 데이터 처리를 할 때도 등장한다.
많은 경우 for loop를 돌려서 문제 해결한다.
1행부터 10,000 행의 데이터 셋이 있으면...
1행부터 for loop를 돌리면서 필요한 연산을 10,000 번 수행한다.
그런데, 이걸 한 방에 연산할 수 있으면 더 빠르지 않을까?
벡터를 사용하면 가능하다.
1억행의 데이터 셋이 있다면...
속도의 차이는 어머어마하지 않을까?
파이썬에서 벡터는 한 개 또는 그이상의 "스칼라" 값으로 구성된 튜플이다.
튜플은 (a,b,c)와 같이 표현된다. (리스트 [a,b,c]와는 다르게 값을 변경할 수 없다.)
즉, a,b,c를 스칼라 값이라고 하면 (a,b,c)가 벡터가 된다.
스칼라는 "방향의 구별은 없고 하나의 수치만으로 완전히 표시되는" 의미를 갖는다.
간단하게, 자연수, 정수, 실수, 분수 등을 떠올리면 된다.
벡터는 기하학에서는 좌표로 볼 수도 있다.
벡터공간에서는 벡터는 방향과 크기를 갖는다.
고등학교 물리 시간에 졸지 않았다면...
좌표에 점찍고 화살표 붙인 걸 기억할 수 있다.
기본적으로 (a,b,c, ... )와 같이 표시되는 벡터는 수학에서 어느 분야에 사용되는 지에 따라서 다양한 의미를 갖는다. 파이썬에서는 벡터를 만든다는 것은 numpy함수를 이용해서 array를 정의하는 것이다.
from numpy import array
v=array([1,2,3])
print(v)
[1,2,3]
이렇게 정의된 벡터는 다양한 연산이 가능하다.
v3 = v1 + v2
v3 = v1 - v2
v3 = v1 * v2
v3 = v1 / v2
v3 = v1.v2 (점연산-dot product)
v2 대신에 스칼라 값을 줄 수도 있다.
댓글의 내용을 분석할 때도 벡터가 사용된다.
댓글이 1000 글자까지 허용된다고 가정하면 3글자 단어가 최대 333개가 사용될 수 있다.
이런 댓글이 1000개가 붙었다고 가정하면 최대 1000 * 333 개의 단어가 사용될 수 있다.
물론, 현실에서는 3000개 단어 이상 사용되지는 않을 것 같다.
3000 개의 단어에 숫자를 붙여서 1,2,3,...,3000 이라고 표시하고,
각 댓글이 사용한 단어는 1, 사용하지 않은 단어는 0이라고 표시한다면
(하나의 댓글에서 몇 번 사용했는 지는 중요하지 않다.),
아래와 같은 벡터를 만들 수 있다.
댓글번호
|
1
|
2
|
3
|
4
|
…
|
3000
|
R0001
|
0
|
1
|
0
|
0
|
…
|
1
|
R0002
|
0
|
1
|
0
|
0
|
…
|
0
|
R0003
|
0
|
1
|
0
|
0
|
…
|
0
|
R0004
|
1
|
0
|
1
|
0
|
…
|
0
|
R0005
|
0
|
1
|
1
|
1
|
…
|
0
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
R1000
|
0
|
1
|
1
|
1
|
…
|
0
|
from numpy import array
v=array([(0,1,0,0,...,0),(0,1,0,0,...,0),...])
이렇게 만들어진 벡터를 이용하면
어떤 단어가 가장 많이 사용됐는지
댓글이 부정적인지
긍정적인지
텍스트 마이닝을 효과적으로 진행할 수 있다.
2차원 어레이는 매트릭스(행렬)로 표현할 수 있다.
이럴경우 다양한 행렬 연산을 쉽게 수행할 수 있다
'Python > Python 용어 정리' 카테고리의 다른 글
sorted( ) 함수 (0) | 2022.07.21 |
---|---|
배열의 축(axis) 이해하기 (0) | 2022.07.12 |
고유값(eigenvalue), 고유벡터(eigenvector) 의 정의 (0) | 2022.07.12 |
Norm, 노름 (0) | 2022.07.12 |
*args와 **kwargs (0) | 2022.07.12 |