본문 바로가기

Programming

(165)
흐르는 물결같은, 흐르는 사인 곡선 만들기 움직이는 사인 곡선을 만들어보자. 마치 파형이 이동하는 듯한. 기본 구상 $\sin ( \theta + \alpha )$는 $\sin \theta$인 곡선이 $\alpha$만큼 왼쪽으로 쉬프트 된 곡선이다. 위 그림은 $\sin \theta$를 $\frac {\pi} {4}$ 만큼씩 왼쪽으로 이동한 것으로, 시간 단위별로 이렇게 이동시키면, 마치 사인파가 왼쪽으로 흐르는 듯한 효과를 낼 수 있을 것이다. 코딩 축 그리기 x축과 y축을 그린다. def draw_axis(self): x_axis = Line(np.array([-4,0,0]), np.array([4,0,0])) y_axis = Line(np.array([-4,2,0]), np.array([-4,-2,0])) self.add(x_axis, y_..
원 위의 점이 돌면서 사인/코사인 곡선 그리기 사인(Sine)과 코사인(Cosine) 그래프가 왜 그렇게 그려지는지 설명할 때 많이 쓰이는 방법은 다음과 같다. 반지름이 1인 원을 그리고, 원의 중심에서 그 원둘레의 임의의 점까지의 직선을 그린 후, x축과 그 직선 간의 사잇각을 $ \theta $라 하자 이 $ \theta $에 대해 $\sin \theta = 세로 $가 되고, $ \cos \theta = 가로$가 된다. 따라서, 그 어떤 점을 원둘레로 이동시키면, $ \theta $가 커지고, 이에 따라 $\sin \theta $의 값이 변하게 되는데, 이를 원 오른편에 가로축을 그리고, 그 위를 $\theta$의 변화값으로 두고, 세로축에 '세로 길이'를 표시하면, 이게 $ \sin \theta $ 값이 된다. 즉, 사인(Sine) 그래프가 된..
원 위의 점이 이동하면서 사인 곡선 그리기 하려는 것 사인(sine)이나 코사인(cosine) 함수의 그래프가 아래와 같이 된다는 것을, 기하학적인 삼각함수의 기본 원리를 가지고 보여주는 애니메이션을 만들고자 한다. 사인 그래프를 예를 들면, 반지름의 길이가 1인 원을 그리고, 그 원둘레의 한 점 P를 잡아서, 원점에서 그 점까지의 직선을 그리고, x축과 그 직선의 사잇각을 $ \theta $라 하자. 그렇다면 $ \sin \theta $는 점 P에서 x축으로 수직으로 내린 길이가 된다. 왜냐면, $ \sin \theta = 높이/빗변$ 이기 때문. 그리고, 점 P의 높이라는 것은, 점 P의 y축 좌표값이다. 즉, $ \sin \theta = {P_y}$ $ \theta $ 값이 0(zero)이 될 때의 P는 원의 오른편 둘레가 x축과 만나는 점..
[팁]파일 복사/붙여넣기 (copy & paste) shutil을 이용하면 간단. shutil.copyfile(src_file, tgt_file) 아래는, 복사할 파일들을 리스트로 만들고, 그 파일들을 tgt_folder에 붙여넣기하는 예제. import os import shutil from_filelist = [ "D:/tmp/1/1.txt", "D:/tmp/1/2.txt", ] tgt_folder = "D:\\tmp\\2" for src in from_filelist: f = os.path.basename(src) tgt = os.path.join(tgt_folder, f) shutil.copyfile(src, tgt) 참고로, shutil에 있는 copy 관련 함수들의 특징을 보면, Function Copies metadata Copies perm..
04-5 데이터 프레임(pandas.DataFrame) pandas 패키지의 DataFrame은 엑셀 데이터와 유사합니다. 엑셀이 가로 세로의 각 칸에 데이터가 있고, 세로축의 행과 가로축의 열이 있듯이, DataFrame도 동일한 구조를 가집니다. data : 실제 데이터 값들 index: 데이터를 구분하는 값들 columns: 데이터 항목들 아래 그림을 보면 DataFram의 data, index, columns가 뭔지 쉽게 파악이 될 것입니다. Pandas 설치하기 Pandas도 Numpy와 마찬가지고 파이썬의 기본 라이브러리가 아니기에, 추가로 설치를 해줘야 합니다. 설치 방법은 Numpy설치 때와 마찬가지로 'pip install'을 사용하면 됩니다. 1) 윈도즈 명령어 창을 연다. : "윈도 키 + R" --> "cmd" 타이핑 2) 'pip in..
04-4 배열(numpy.array) 이번 페이지에서는, 수학에서의 '행렬' 데이터를 처리할 수 있는 자료형인 numpy.array에 대해서 알아보겠습니다. 넘파이(NumPy)는 파이썬에서 과학/수학 계산을 할 수 있도록, 여러 가지 과학/수학용 자료형/함수들이 들어있는 라이브러리입니다. (과학자/수학자들이 파이썬으로 프로그래밍하다가, 필요한 기능들을 만들었고, 이것들을 집대성해서 일반인도 쓸 수 있게 공개한 것이 '넘파이' 라이브러리입니다.) 여기서는 넘파이의 행렬 계산 기능을 중심으로 살펴볼 것입니다. 왜 행렬이 필요한가? (왜 행렬까지 공부해야 하는가?) 파이썬의 기본 자료형인 리스트(list), 딕셔너리(dict), 튜플(tuple), 집합(set)을 공부했는데, 기본 자료형도 아닌 numpy.array라는 것을 왜 알아야 하는 걸까..
04-4 집합(set) 집합(Set)은 수학에서의 '집합'과 같은 성질을 같습니다. 생성은 set( [원소1, 원소2, ...] )와 같이, set( ) 메서드에 리스트를 전달해서 생성 중복된 원소가 없음 (중복된 원소를 가질 수 없음) 원소간의 순서가 없음. 집어넣은 차례대로 원소가 있는게 아님 --> 인덱스 번호로 원소를 읽을 수 없음 집합간의 연산을 통해서 교집합/합집합/차집합을 구할 수 있음 a = set([1,2,3,4]) b = set([4,5,6]) 합 = a | b print(합) # {1, 2, 3, 4, 5, 6} 교 = a & b print(교) # {4} 차 = a - b print(차) # {1, 2, 3} 위 내용만 읽고 전부 이해 되었다면, 아랫 부분에 있는 내용들 스킵하고 다음글로 넘어가도 됩니다...
04-3 튜플(tuple) 튜플(tuple)은 리스트(list)와 비슷한 기능을 가지는데, 차이점은 한 번 만든 튜플 자료들을 추가/삭제를 못한다는 것입니다. 즉, 처음에 만든 자료를 읽기만 하는 용도로 쓸 데 사용합니다. 그럼 추가/삭제를 할 수있는 리스트만 사용하지 왜 튜플이란 걸 만들어서 귀찮게 할까요? 속도 때문입니다. 추가/삭제할 수 없는 튜플은 리스트에 비해서 생성 및 읽기 속도가 빠릅니다. 리스트는 나중에 추가/삭제가 가능한 구조로 데이터를 생성하느라 시간이 걸리는데 반해, 튜플은 그런 작업이 없기에 빠릅니다. 그래서, 추가/삭제가 필요 없을 것 같은 데이터를 처리할 때는 튜플을 사용하면 좀 더 낫긴 한데, 자료가 수만 건 이상이 되지 않는 한, 사실 속도 차이를 느끼기 힘듭니다. 그냥 리스트만 사용해도 충분합니다. ..
04-2 딕셔너리(dict) 앞 페이지에서 리스트(list)에 대해 알아봤습니다. a = [1, 3, 5, 7, 9] '10보다 작은 홀수' 혹은 '어떤 학생에 대한 국어/영어/수학 점수'처럼, 여러 개의 값들을 뭉치로 다룰 수 있는 것이 '리스트'였습니다. 그런데, `학생 A의 국어/영어/수학 점수, 학생 B의 국어/영어/수학 점수,...'처럼 100명의 학생에 대한 점수들을 다뤄야 한다면 어떻게 할까요? '학생 A'에 대응하는 `국/영/수 점수`, '학생 B'에 대응하는 `국/영/수 점수` 같은 자료가 만들어져야 할 것입니다. 이러한 처리가 가능하도록 만들어진 자료형이 딕셔너리(Dictionary)입니다. 1. 생성하기 (Create) 비어있는 딕셔너리 만들기 a = {} 딕셔너리는 중괄호를 이용해서 만듭니다. (리스트는 대괄호..
04-1 리스트(list) 앞 장의 '기본 문법 익히기'에서, 어떤 약속된 문자에다가 값을 지정하고 그 값을 바꾸면서 사용할 수 있는 것을 본 바 있습니다. 변수라는 것이죠. 1부터 100까지의 합을 구하는 코드는 아래와 같고, 여기서 'sum'이 변수입니다. sum = 0 for i in range(1,101,1): sum = sum + i sum 변수가 처음에는 0이었다가 1 -> 3 -> 5 -> ... -> 5050 이렇게 변하게 됩니다. 그런데, 여기서 sum이 한 가지 값만 가지는 것이 아니고, 이렇게 변하는 모든 값을 덩어리로 가지고 있으려면 어떻게 해야 할까요? 이런 요구를 만족시킬 수 있는 게 리스트(list)입니다. 리스트형 변수를 만들면 이 변수에 여러 개의 값들을 저장할 수 있습니다. 이제 이 리스트형 변수를..