<행렬의 내적 구하기>

Minwoong Kim·2022년 8월 23일
0

23-Aug-2022, today getting out of my comfort zone

<행렬의 내적 구하기>

길이가 동일한 두 배열의 내적을 구해보자.

comfort zone)

길이가 같은 a, b 배열이 주어질 때, a와 b의 내적을 구하는 방식이다. for문을 활용하여, a와 b의 각 element들을 곱한 뒤 result에 더해주는 방식으로 설계했다.

여기서 중요한 점은 result의 값을 초기화? 해주는 것이다.
result에 0을 할당하지 않고 선언만 한 뒤 프로그램을 실행해보면, 'NaN(Not a Number)'가 출력되는데 이는 result의 처음 값이 'undefined' 이었기 때문이다.

undefined + a[0]b[0] + a[1]b[1] ........ = ?

JS에서는 변수 type은 없지만 값 type은 정해져 있다. 위의 연산은 문자열 type과 숫자 type의 연산이므로 수행할 수 없고, 그 결과는 NaN 이다.

처음에 NaN이 출력되어 당황했지만, 곧바로 원인을 찾아서 해결할 수 있었다. 앞으로는 이러한 JS의 기본 개념을 똑바로 알고 활용해야겠다.


Get out of comfort zone)

reduce 함수를 사용하여 동일 작업을 수행할 수 있었다.
(객체에서 제공하는 함수를 활용하여 연산을 수행하는 방식이니, 아무래도 for문 보다는 빠르고 효율적일 것으로 보인다)

reduce method
arr.reduce(callback[, initialValue])
reduce method는 다음과 같은 4개의 parameter를 받는다.

  • accumulator : 누적값
  • currentValue : 현재값
  • currentIndex : 현재 Index
  • array : 배열

추가로, 결과값을 return 할 때 Initial Value(초기값)을 설정해줄 수 있다. 이때 initialValue를 넣어주느냐 마느냐는 선택 사항이나, 주어진 배열의 모든 요소에 대해 동일한 작업을 수행하고 싶다면 넣어주는 것이 안전하다. 초기값을 설정해주지 않으면, 가장 첫번째 Index는 건너뛰고 Index 1부터 호출하기 때문이다.

다시 말해, 아래와 같이 인식한다는 것이다.
accumulator = Index 0
currentValue = Index 1
currentIndex = Index 1

다음 예시를 통해 그 차이를 살펴보자.

Example 1

[1, 2, 3, 4, 5].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator -= currentValue;
});

Example 2

[1, 2, 3, 4, 5].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator -= currentValue;
},0);

Exaple 1에서는 초기값을 설정해주지 않았고, 2에서는 0으로 설정했다. 동일한 배열에 대한 동일한 연산을 수행할 때, 결과값은 어떻게 다를까? 동작 순서에 맞게 따라가보자.

예시 1)
accumulator = 1
currentValue = 2
currentIndex = 1
return = -1

accumulator = -1
currentValue = 3
currentIndex = 2
return = -4

accumulator = -4
currentValue = 4
currentIndex = 3
return = -8

accumulator = -8
currentValue = 5
currentIndex = 4
return = -13

최종적으로 return 하는 값은 -13이다.

예시 2)

accumulator = 0
currentValue = 1
currentIndex = 0
return = -1

accumulator = -1
currentValue = 2
currentIndex = 1
return = -3

...

accumulator = -10
currentValue = 5
currentIndex = 4
return = -15

최종적으로 return 하는 값은 -15이다.

Initial Value 설정 여부에 따라 값 차이가 나는 것을 확인할 수 있다.


Plus) 행렬, 벡터 그리고 그것들을 활용한 외적, 내적이 프로그래밍 상에서 무슨 의미를 가지는 걸까?

그래도 고등학교때 배웠던 내용들을 오랜만에 만나 반가웠네. 그때는 이걸 배워서 어디에 쓰는건지.. 의구심만 들었지만 이번에는 왜 배우는지, 왜 필요한지 직접 확인해봐야겠다.

profile
Get out of my comfort zone

0개의 댓글