Vector, Dot product, Cross product

고등학교 때 배웠던 것 같기도 하고 아닌 것 같기도 한 벡터와 내적, 외적 구하는 게 부트캠프 숙제로 나와버려서 그냥 아에 개념부터 새로 공부한 내용을 옮겨본다. 수식을 어떻게 기록해야 할지 몰라서 코드 적는 칸에 비슷한 기호로 수식을 적어두었는데 코드나 실제 수학기호와는 전혀 상관없다… 나중에 기호 쓰는 법 배우면 고치겠다.)
내가 이해한대로 번역하여 정리한 영상 내용이며, 출처는 하단에 있다.

Vector (벡터)

벡터의 정의

  1. 물리학도의 관점: 벡터는 공간 속에서 길이(length)와 방향(direction)으로 정의되는 화살표이다. 평평한 2차원 면 위에서는 2차원의 벡터, 3차원 공간에서는 3차원의 벡터로 정의된다.
  2. 컴퓨터과학도의 관점: 벡터는 순차적인 숫자의 리스트(ordered lists of numbers)이다. 데이터를 분석을 위해 순서대로 나열한 것이기 때문에 순서(order)가 중요하며, 2개 항목이 있을 경우 2차원, 3개 항목이 있을 경우 3차원 벡터이다.
  3. 수학도의 관점: 위의 두 관점을 모두 아우른다. 두 벡터를 더하거나(vector addtion) 벡터에 숫자를 곱할 수 있으며(multiplication by numbers), 이 개념은 선형대수 전반에 걸쳐 중요한 역할을 담당한다.
  • 편의를 위해 우리는 벡터를 말할 때 2차원의 xy평면좌표에서 원점을 출발선으로 하는 화살표를 떠올리기로 하자. (엄밀히 말하면 물리학에서의 벡터는 어디서 출발하든 상관이 없지만 우리는 원점을 출발선으로 하는 선형대수를 기준으로 다뤄보자)

    • 벡터의 좌표는 xy평면 위 화살표가 출발선에서 화살표 끝까지 다다르는 움직임을 알려주는 숫자쌍이다.
    • 벡터 좌표 첫번째 숫자는 x축, 두번째 숫자는 y축에서의 움직임을 나타낸다.
    • 양수일 경우 각각 우측/위쪽, 음수는 왼쪽/아래쪽을 향한다.
    • (+3차원에서) x축과 y축에 수직인 z축에서 움직이는 세번째 숫자가 추가된다.

Vector Addition (벡터합)

  • 두 벡터가 있을 때, 첫번째 벡터에서 주어진 값을 따라 이동한 후 두번째 벡터를 따라 이동하면, 결국 두 벡터의 숫자쌍이 서로 대응하는 위치의 값(=항)을 더한만큼 이동한 벡터와 같다.
1
2
3
a = <2,3,1>
b = <-1,0,4>
a + b = <(2+(-1)),(3+0),(1+4)> = <1,3,5>

Scalar Multiplication (스칼라곱)

  • 벡터에 숫자를 곱한다는 것은 벡터 화살표의 길이를 n배만큼 늘이거나 줄이는 것을 의미하며, 음수를 곱할 경우 화살표의 방향이 반대로 된다.
  • 이처럼 벡터 길이나 방향을 바꾸는 것을 ‘스케일링(scaling)’이라고 하며 스케일링에 사용되는 숫자를 **스칼라(scalar)**라고 한다.
  • 벡터에 스칼라를 곱한다는 것은 리스트 각 원소에 그 숫자를 곱하는 것과 같다.
    1
    2
    a = <1,4,-2>
    3*a = <3*1, 3*4, 3*(-2)> = <3,12,-6>

Dot Product (내적)

  • 각 벡터의 숫자쌍에서 서로 상응하는 값을 곱해 모두 더한 값

    1
    2
    3
    4
    a = <a1,a2,a3>
    b = <b1,b2,b3>
    a.b = a1*b1 + a2*b2 + a3*b3
    #벡터기호는 어떻게 쓰는지 몰라서 패스
  • Practice : dot product 값 구하기

    1
    2
    3
    a = <2,5>
    b = <-3,1>
    a.b = 2*(-3) + 5*1 = -1 #dot product 를 임시방편으로 .으로 표현했다...
  • Practice: Find angle & see if orthogonal(수직)

    • 두 벡터(a,b) 사이의 각 θ에 대해서, cosθ은 두 벡터의 내적을 두 벡터의 magnitude(길이)의 곱으로 나눈 값이다.
    • a와 b의 내적이 0이라는 것은 벡터 a와 벡터 b가 수직을 이룬다는 것을 의미한다
    • a라는 벡터 화살표의 길이(magnitude)는 |a|로 나타내며, 벡터 리스트 모든 요소의 제곱을 더한 값의 제곱근이다.
      1
      2
      3
      4
      5
      6
      7
      8
      cosθ = a.b/(|a|*|b|)

      a = <2,4>
      b = <4,-2>
      a.b = 2*4+4*(-2) = 0
      cosθ = 0

      |a|=sqrt(x**2+y**2+z**2)

Cross Product (외적)

  • 두 벡터(a,b)에 동시에 수직을 이루는 방향으로, 값 하나가 결과로 주어지는 내적과는 달리 결과물은 또다른 벡터이다.
    • 외적을 구해보자
      1
      2
      3
      4
      a = <a1,a2,a3> 
      b = <b1,b2,b3>
      aXb = <a2*b3-a3*b2, a3*b1-a1*b3, a1*b2-a2*b1>
      #cross 기호는 임시방편으로 X로 표기
  • 두 벡터의 cross product인 벡터는 두 벡터 모두에 대해서 수직을 이룬다.
  • a와 b의 길이를 변으로 하는 평행사변형의 넓이를 magnitude로 갖는다.

출처

느낀 점

아무리 생각해도 7차 교과과정의 문과생은 이런 걸 배운 적이 없는 것 같다. 아무튼 생각보다 수식이 어렵진 않아 다행이다. 다만 이 블로그에 수식을 어떻게 정확하게 적을 수 있을지가 고민이다.