본 포스트팅은 인하대학교 컴퓨터공학과 오픈소스 SW 개론 수업자료에 기반하고 있습니다. 개인적인 학습을 위한 정리여서 설명이 다소 미흡할 수 있으니, 간단히 참고하실 분들만 포스팅을 참고해주세요 😎
points = np.arange(-5, 5, 0.01) : points 라는 변수로 -5 ~ 5범위에서 0.01의 간격으로 값을 1000개 저장
xs, ys = np,meshgrid(points, points) : 앞서구한 points 변수에 담긴 1000개의 값에 대한 쌍을 구함. 즉 1000x1000 형태의 쌍이 나오고, 각 쌍을 xs 와 ys 에 넣어준다.
xs 에는 ys 가 transpose 된 결과가 들어가있다.
z = np.sqrt(xs ** 2 + ys ** 2) : sqrt 함수를 이런식으로 배열을 다 적용하면 x^2 + y^2 에 루트를 씌운값을 단 한번에 연산을 적용해서 구할수 있다.
예시1
예시2
결과
1차원배열인 경우 : 한 인덱스씩 넘어갈때마다 누적해서 해당 인덱스에 더해줌
ex) 아래처럼 0열에는 0열값, 1열에는 0열+1열값, 2열에는 0열+1열+2열값,... 으로 누적되는 방식
np.unique(arr) :중복을 제거하고 유일하게 한 값만 남긴다.
2, 3, 6이라는 맴버가 values 라는 배열에 존재하면 True 를, 아니면 False 를 출력
=> 그래서 보듯이, 2 3 6 에만 해당하는 값에만 True 가 할당된 모습을 볼 수 있다.
1 또는 -1 중에서 택해서 1000번을 출력함
draws = np.random.randint(0, 2, size=nsteps)
=> 0과 1값을 1000번 출력해서 drwas 배열에 저장
steps = np.where(draws > 0, 1 , -1)
=> draws 배열의 원소의 값이 0또는 1이므로, draws > 0 이라는 조건문을 통해서 현재 draws 배열에서 조회하는 원소의 값이 1이면 1을 출력하고, 0이면 -1이 출력하도록 함
=> 결과적으로 steps 배열은 1과 -1로 이루어진 1000개의 값을 가지는 1차원 배열이 된다.
ex) np.abs(walk) >= 10 : 첫 지점으로부터 10칸 이동한 지점을 모두 찾고 싶을때, 즉 위로 10칸 또는 아래로 10칸을 간 경우를 찾고 싶은 경우로 walk 배열을 abs() 함수를 통해서 절댓값으로 변환해주고, 해당 절댓값들이 10보다 큰 경우를 다 찾아주면 된다.
다 찾고나서 argmax() 함수를 적용하면 10보다 큰 경우만 True 로, 아닌경우는 False 를 출력하게 된다. 그래서 맨처음에 나오는 10보다 큰 경우를 출력할 수가 있게되어서, 결국엔 맨 처음에 10번쨰 위치로 도달한 인덱스가 출력된다.
=> 즉 argmax() 를 통해 처음으로 10보다 큰 인덱스 위치값을 출력할 수 있다.
결과값이 37이라는 것은 곧 37번째 걸음을 걸을때 맨처음 위치에서 10 만큼 떨어진 곳에 발을 내딛었다는 것을 알 수 있게된다.