1. 산포도

수학(x) 75 30 50 85 45 85 20 95 95 35
과학(y) 60 85 55 70 60 90 15 80 100 50
%matplotlib inline #jupiter computer 시작하기 
import matplotlib.pyplot as plt #pyplot을 plt로 불러오기
import pandas as pd #pandas를 pd로 불러오기

dat = pd.read_csv('score.csv', encoding='UTF-8') #데이터 불러오기

plt.scatter(dat['수학'], dat['과학']) #pyplot에 포함된 scatter함수 사용 (점을 그려라)
plt.axis('equal') 
plt.show()

 

 

2. 공분산과 상관관계

- 공분산 = ((x-x의 평균)x(y-y의 평균)의 합계)/ 데이터의 개수 

- 양수일 경우, x와 y가 모두 평균값보다 크거나 작은 경우 

- 음수일 경우, x와 y 중 한 값은 크거나 작은 경우 

>>> import numpy as np 
>>> import pandas as pd
>>> dat = pd.read_csv('score.csv', encoding='UTF-8')
>>> correlation = np. corrcoef(dat['수학'], dat['과학']) 
#직접 공분산이나 표준편차를 구하지 않아도 상관관계 계수 구하는 함수를 이용해 구할 수 있음 
>>> correlation[0,1] #상관계수 
0.827685316489

 

- 공분산은 두 데이터의 관계를 나타내지만 단위가 정해지지 않아 (스마트폰 사용 시간), (학력)같이 다른 데이터를 계산하는 경우 표준화 작업이 필요함 = 상관관계 

- 상관계수 = 공분산 / (x의 표준편차) x (y의 표준편차)

- 상관계수는 반드시 -1 ~ 1 범위에 있게 됨 

 

1. 분산과 표준편차

  - 철수와 사장님이 김밥집에서 일할 때 철수의 김밥 모양이 제각각이었음. 그래서 무게를 재 보니 사장님과 철수 모두      100g으로 동일한 무게가 나왔음

  - 그러나 도수분포도를 보면 철수가 만든 김밥이 크기가 고르지 않다는 사실을 알 수 있음 

사장님 94 105 107 106 88
철수 117 84 95 72 132

 

>>> import numpy as np #numpy모듈을 np로 불러오겠음
>>> owner = [94, 105, 107, 106, 88] #사장님의 데이터 지정
>>> mean = np.mean(owner) #평균을 구해라 
>>> sum = 0 #답(멀어진 정도의합계)을 넣을 변수를 초기화한다(?)
>>> for d in owner: #모든 데이터에 대해
...   sum = sum + (d-mean) #데이터-평균의 합계를 구한다
...
>>> sum
0.0

 

- 평균에서 멀어진 정도, 각각의 멀어진 정도를 모두 더하면 전체적인 멀어진 정도를 구할 수 있음 

- 모든 데이터를 평탄하게 만든 값이 평균값이므로 이 평균값의 차를 모두 더하면 당연히 0이 될 것 

- 데이터 값의 평균을 제곱한 값을 데이터 개수로 나누면 분산을 구할 수 있음

>>> sum = 0 
>>> for d in owner:
...     sum = sum + (d - mean)**2 #데이터-평균을 제곱한 값
...
>>> sum 
290.0

(여기서의 sum = sum + (d-mean)**2

>>> import math #math 함수를 불러오겠음
>>> variance = sum/5 #분산을 구하라
>>> stdev = math.sqrt(variance) #표준편차(제곱한 값을 되돌리기 위해 루트로 계산한 값)
>>> variance, stdev #분산, 표준편차를 표시해라 
(58.0, 7.615773105863909)
  분산 표준편차
사장님 58 8
철수 476 22

 

 

 

2. 표준 점수

  - 표준화 = (데이터-평균)/표준편차 

  - 표준점수 = ((점수-평균)/표준편차)*10 + 50

  4월 9월
점수 320점 430점
평균 278점 388점
표준편차 60 60
>>> def dev_value(score, mean, stdev): #dev_value(함수의 인수), 함수의 인수는 점수, 평균값, 표준편차임
...  return (score - mean) / stdev * 10 + 50 #표준 점수를 계산하라 
...
>>> dev_value(320, 278, 60) #4월의 표준 점수를 계산하라 
57.0

>>> dev_value(430, 388, 60) #9월의 표준 점수를 계산하라 
57.0

 

 

1. csv파일 읽기 

 

1) csv파일 불러오는 방법

 - ★ jupiter computer을 실행시킬 폴더에 넣어주기! 꼭!

 - 텍스트에 내가 원하는 쉼표 데이터를 넣고, .csv로 저장해야지 변환됨 

 - 즉, csv파일이 있는 곳에 jupiter computer 실행하기 

 

2) csv파일이란? 

  - 쉼표를 기준으로 항목을 구분하여 저장한 데이터

  - 엑셀 파일로 편집을 할 수 있음

  - 데이터베이스나 표 계산 소프트웨어 데이터를 보존하기 위해 형식

  수학 과학
0 75 60
1 30 85
2 50 55
3 85 70
4 45 60

① import pandas as pd ← pandas 모듈을 pd로 불러오겠음

 

② dat = pd.read_csv('score.csv', encoding='UTF-8')

    ← csv파일을 불러오겠음. 처음은 파일명, 뒤에는 한국어로 쓰인 데이터를 읽어들이기 위해 유니코드를 변환하는 것

    dat.head( ) ← 내용을 확인해라 

 

 

 

2. 평균값, 중앙값, 최빈값

 

1) 평균값

>>> (1+2+3+4+5) / 5 #1~5까지의 평균을 구하는 공식
3.0 #평균

>>> (1+2+1+2+9) / 5 #1,2,1,2,9의 평균을 구하는 공식
3.0 #평균값

 

2) 평균값, 중앙값, 최빈값

import pands as pd #csv파일을 불러오기 위해 pandas 모듈을 pd로 불러오겠음
import numpy as np #numpy함수를 np로 불러오겠음

dat = pd.read_csv('score.csv', encoding='UTF-8) #데이터를 불러와라

print('평균값', np.mean(dat['수학'])) #데이터에서 평균값을 구하라
print('중앙값', np.median(dat['수학'])) #데이터에서 중앙값을 구하라

bincnt = np.bincount(dat['수학']) #같은 값의 개수를 세라
mode = np.argmax(bincnt) #bincnt에 있는 값 중에 가장 큰 값을 꺼내라 
print('최빈치', mode) #그 값을 나타내라 

 

 

 

3. 도수분포표

계급(점수) 도수(인원수)
0~9 0
10~19 1
20~29 2
30~39 3
40~49 4
50~59 5
60~69 3
70~79 1
80~89 5
90~100 16
%matloplib inline #jupiter computer 시작 명령문 
import matplotlib.pyplot as plt #pyplot을 plt로 불러오겠음
import pandas as pd #pandas를 pd로 불러오겠음 

dat = pd.read_csv('score_csv', encoding='UTF-8') #csv 데이터를 불러오겠음 

hist = [0]*10 #for 반복문, 도수(요소 수 10개를 0으로 초기화한다(?)
for dat in dat['수학']:
  if dat < 10:  hist[0] += 1
  elif dat < 20: hist[1] += 1
  elif dat < 30: hist[2] += 1
  elif dat < 40: hist[3] += 1
  elif dat < 50: hist[4] += 1
  elif dat < 60: hist[5] += 1
  elif dat < 70: hist[6] += 1
  elif dat < 80: hist[7] += 1
  elif dat < 90: hist[8] += 1
  elif dat < 100: hist[9] += 1 #데이터가 10보다 작을 때 hist[0]에 1을 더하는 방식
print('도수:', hist)

# 도수분포도
x = list(range(1,11)) #x축에 해당하는 값 
labels = ['0~', '10~', '20~', '30~', '40~', '50~', '60~', '70~', '80~', '90~'] #x축 눈금 레이블

plt.bar(x, hist, tick_label = labels, width=1)

plt.show #막대 그래프를 그려라 

 

1. 내가 원하는 이미지 넣기

1) 다음 이미지를 넣고자 할 때, 준비해야 할 것이 2가지가 있다. 

 

    ① 내가 넣고 싶은 이미지를 저장하고, 이름을 myimage.jpg로 바꾼다. 

       - 굳이 myimage가 아니어도 됨. 그런데 pycharm에 넣기 편하게 이름을 변경한 것. 

       - jpg 형식의 파일만 되고(jpeg안됨) 파일명에 상관없이 함수에는 꼭 .jpg를 넣어야 함 

 

    ② 사진 파일을 꼭! pycharm 프로젝트 파일 폴더에 함께 넣어준다. 

       - 경로를 꼭 이렇게 설정해야지 pycharm으로 불러올 수 있음 

 

2) 

import pygame
pygame.init()

#윈도우 창의 크기 설정하기 
display_width = 800
display_height = 500 

#우리의 화면이 우리가 설정한 저 변수에 따라 크기가 지정되도록 명령문 입력
ourScreen = pygame.display.set_mode((display_width, display_height))

#넣고 싶은 이미지를 myImg라는 변수로 지정하여 명령문 입력
myImg = pygame.image.load('123.jpg')

#함수를 지정해주는 것. 우리가 화면에 나타내려면 blit을 해주어야 함 
def myimge(x,y):
    ourScreen.blit(myImg,(x, y))

#첫 이미지의 위치 정해주기 
x = (display_width * 0.1)
y = (display_height * 0.1)

finished = False
while not finished:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True
    #우리의 원래 화면색 지정하기 
    ourScreen.fill((186, 231, 242))
    myimge(x,y)
    pygame.display.flip()
pygame.quit()
quit()

 

2. 창에 소리 넣기 

1)우리가 넣을 음악 파일을 준비해야 함 (mp3파일)

  - 이미지와 똑같이 프로젝트 폴더에 넣어야 함 

  - 음악 파일 명은 영문or숫자로 해야 함 

import pygame
pygame.init()

#노래를 불러오는 명령문 
pygame.mixer.music.load('노래명.mp3')
pygame.mixer.music.play(0) #음악이 몇 번 재생되는지 지정하는 명령문(0 = 1번, -1 = 반복재생) 

display_width = 800
display_height = 500 

ourScreen = pygame.display.set_mode((display_width, display_height))

myImg = pygame.image.load('123.jpg')
 
def myimge(x,y):
    ourScreen.blit(myImg,(x, y))

x = (display_width * 0.1)
y = (display_height * 0.1)

finished = False
while not finished:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True
    ourScreen.fill((186, 231, 242))
    myimge(x,y)
    pygame.display.flip()
pygame.quit()
quit()

 

 

1. 윈도우 창 만들기 (기본적인 명령문 포함)

 

import pygame #pygame 모듈을 불러와라 
pygame.init #pygame을 시작하는 명령문 (ex.%matloplib inline)

ourScreen = pygame.display.set_mode((1400,2000)) 
#우리의 화면을 ourScreen이라는 변수로 지정한 뒤 뒤에 크기를 지정해 줌 
pygame.display.set_caption('정아린') #내가 띄울 윈도우 창의 이름을 지정하는 것 

#이벤트 명령 지정 
finish = False:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      finish = True
    pygame.display.flip() 
#update를 하는 명령문, update라고 해도 되는데 여기서는 그냥 flip이라고 함 (왜?) 책을 주르륵 넘기는거 생각!

 

 

2. 게임 루프 개념 구현하기 

1) 기본적 원리 

① Handle events : 내가 이벤트를 만들어서 명령문을 넣어줌 (ex. 몬스터에 닿았을 때)

② Update game state : 그 게임을 업데이트 해주어야 함 (그래야 바뀐것을 확인해야 하니까) (ex.플레이어의 pH가 낮아짐)

③ Draw screen : 화면에 띄워라 (ex. 플레이어가 화면을 통해 볼 수 있음)

 

2) 사각형 만들기 

import pygame  
pygame.init 

ourScreen = pygame.display.set_mode((400,300)) 
pygame.display.set_caption('정아린')

finish = False:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      finish = True
  pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(20, 20, 60, 60))
  #우리 화면에 rect(사각형)그려라. 그리고 RGB값을 통해 배경색을 변경해라(저기엔 0~255까지의 수를 넣어주면 됨)
  #사각형의 위치 변경 : 앞의 두 좌표 (단위는 pixel), 사각형의 크기 변경 : 뒤에 두 좌표
  #(255, 255, 255는 흰색/ 0, 0, 0은 검은색임)
  pygame.display.flip()

 

 

 

3) 스페이스바를 누르면 사각형의 색이 변경되도록 하기 

 

import pygame  
pygame.init 

ourScreen = pygame.display.set_mode((400,300)) 
pygame.display.set_caption('정아린')

finish = False:
colorBlue = True #화면 색을 RGB가 아닌 변수로 지정 
while not finish:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      finish = True
  if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  #이벤트 지정 : keydown, 즉 키보드 나타내는 모듈에서 스페이스 키를 누를 때 
    colorBlue = not colorBlue #이벤트가 일어나면 그 원상태 유지가 되지 않음
  if colorBlue: color = (0, 128, 255) #조건문 사용 : colorBlue의 원상태의 색 지정
  else : color = (255, 255, 255) #아니라면 이 색으로 변경될 것 (즉 이벤트 발생 시) 
  pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(20, 20, 60, 60))
  pygame.display.flip()

 

 

 

4) 사각형이 방향키에 따라 움직이도록 하기 

import pygame  
pygame.init 

ourScreen = pygame.display.set_mode((400,300)) 
pygame.display.set_caption('정아린')

finish = False:
colorBlue = True 

x = 30
y = 30 #사각형의 처음 위치 지정 
clock = pygame.time.Clock() #시간 관련 함수 사용할 때 항상 clock사용. 초 당 프레임 지정 가능 

while not finish:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      finish = True
  if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    colorBlue = not colorBlue 
    
    pressed = pygame.key.get_pressed()
  if pressed[pygame.K_UP]: y -= 3
  if pressed[pygame.K_DOWN]: y += 3
  if pressed[pygame.K_LEFT]: x -= 3
  if pressed[pygame.K_RIGHT]: x += 3
  #키보드에 따라 위치가 변하도록 각각 지정 
  
  ourScreen.fill((0, 0, 0)) 
  #사각형에 따라 움직여야 하기 때문에 기존 사각형을 지워야 함 
  
  if colorBlue: color = (0, 128, 255) 
  else : color = (255, 255, 255) 
  pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(x, y, 60, 60))
  #사각형의 위치를 x와 y라는 변수로 설정. 멈춰있는 것이 아니라 연속적으로 움직여야 하기 때문
  pygame.display.flip()
  clock.tick(60) #기존 속도가 너무 빠르기 때문에 초당 60프레임으로 지정해주는 것 

 

 

1. pygame을 이용하기 위해 pycharm을 다운 받아야 함 

(cf. 초절정 Python (파이썬) 강좌 - 18 . 파이썬 게임 만들기 (1) pycharm IDE 에 pyGame 설치 - YouTube)

- 이 영상 기준(2016) 64비트는 개발 중이라 32비트 사용을 권장. 

따라서 python이든 pygame이든 32비트를 사용해야 하고, 

pygame은 항상 python과 버전, 비트를 동일하게 맞춰야 실행됨.

또 pygame은 단지 모듈일 뿐, pycharm을 통해 우리가 원하는 명령문을 만들어야 함

 

2. 이 때 꽤 막혀서 힘들었는데, python이나 pygame은 낮은 버전을, 

pycharm은 비트 상관없으니 너무 고버전을 사용하게 되면 python이나 pygame이 업데이트 되지 않고

버전이 맞지 않는다고 계속 오류만 뜨게 됨. 

따라서 영상대로의 낮은 5.0버전을 사용하는게 좋음

 

3. 지금은 시간이 많이 지났으니 굳이 32비트가 아닌 최신 버전의 python, pygame 64비트를 다운받아서

내 마음대로 실행해보고 싶었으나 첫 단추가 중요하여 그냥 영상대로 따라했음 

 

 

1. 주사위를 n번 던졌을 때 1이 나올 확률을 python으로 구하기 

① import random ← random 모듈을 불러오겠음

 

② 주사위를 던지는 경우 

    cnt = 0 ← 1이 나온 횟수를 일단 cnt 변수로 지정 (아직까진 한 번도 안 던졌으니까 0번임)

    for i in range(10000): ← 범위를 10000번으로 지정하여 주사위를 10000번을 던질 때

        dice = random.randint(1, 6) ←주사위의 1~6까지의 정수 중 하나를 무작위로 선택함 (1~6사이)

        if dice == 1: ← 만약 1이 나왔을 때 

           cnt += 1 ← 위 변수 cnt에 1이 더해짐 

 

③ p = cnt / 10000 ← 확률 = 일이 일어난 경우 / 전체의 경우 

    print(p)

 

 

 

2. 7개의 막대 중 2개의 당첨이 있다고 할 때, A와 B, C가 막대를 순서대로 한 개씩 뽑을 때의 확률 

1) 경우 확실히 하기 

  - A, B, C 순서대로 막대를 1개씩 뽑는 것

 

2) A가 당첨될 확률

  - 전체확률 = 분모 : 7가지 

  - A가 당첨될 확률 = 분자 : 2가지 

  - 2/7

 

3) B가 당첨될 확률은 순서에 의해 A가 당첨됐는지 아닌지에 따라 결정됨 

  - A가 이미 막대를 하나 가져갔으므로 전체 확률은 6가지 

  - A가 당첨됐다고 할 때 당첨 막대는 하나밖에 없으므로 당첨될 확률 : 1/6

  - A가 당첨되지 않았다고 할 때 당첨 막대는 2개가 있으므로 당첨될 확률 : 2/6

  - A가 당첨됐다고 할 때 당첨되지 않을 확률 : 5/6

  - A가 당첨되지 않았다고 할 때 당첨되지 않을 확률 : 4/6

 

3) B의 당첨될 확률 구하기 : 이 상황은 동시에 일어나므로 곱의 법칙을 이용해야 함 

  - A와 B가 모두 당첨일 확률 : 2/7 x 1/6 = 2/42

  - A는 당첨되지 않고 B는 당첨될 확률 : 5/7 x 2/6 = 10/42

  - 2/42 + 10/42 = 2/7 

  - 즉 A가 처음 막대를 뽑을때와 똑같은 확률 = 순서는 상관 없음 

 

>>> from fractions import Fraction #fractions 모듈에서 fraction을 불러와라 (분수 표현하기 위해)
>>> Fraction(1, 6) #분자는 1, 분모는 6으로 지정 
Fraction(1, 6) #1/6을 의미 

>>> x = Fraction(2, 7) * Fraction(5, 6) * Fraction(1, 5) #경우X = A당첨 → B낙첨 → C당첨
>>> y = Fraction(5, 7) * Fraction(2, 6) * Fraction(1, 5) #경우Y = A낙첨 → B당첨 → C당첨
>>> z = Fraction(5, 7) * Fraction(4, 6) * Fraction(2, 5) #경우Z = A낙첨 → B낙첨 → C당첨
>>> p = x + y + z # 경우 X, Y, Z에서 하나가 발생할 확률 
>>> p 
Fraction(2, 7) 

 

1. 경우의 수 : 1에서 10까지의 자연수 중 2의 배수 또는 3의 배수는 몇 개가 있을까?

 

1) 확률에서의 곱셈법칙 이용 '또는' : a x b

>>> A = { 2, 4, 6, 8, 10 } #2의 배수인 집합 A를 지정
>>> B = { 3, 6, 9 } #3의 배수인 집합 B를 지정
>>> len( A | B) #A와 B의 합집합의 원소를 구하라 
7 #7가지 

 

 

2. 순열 : nPr = n x (n-1) x (n-2) x (n-3) x ··· (n-r+1)

 

1) 1~5 범위에 있는 숫자를 사용하여 만들 수 있는 세 자리 숫자는?

>>> import itertools #반복자 함수(순열이나 조합) itertools를 불러온다

>>> num = { 1, 2, 3, 4, 5 } #데이터를 정의한다
>>> A = set(inertools.permutations(num, 3) 
#데이터 num에 있는 값 중에서 세 개를 선택하는 순열로 집합을 생성

>>> len(A) #집합 A의 원소 수를 나타내라 
60 #1 ~ 5 범위의 있는 숫자를 사용하여 만들 수 있는 세 자리 숫자의 개수 

>>> for a in A: #A에 있는 모든 원소에 접근하는 루프 (루프 : 명령의 집합)
...   print(a) #A의 원소를 나타내라 
...
(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
 ~중략~
(5, 4, 1)
(5, 4, 2)
(5, 4, 3)

 

 

3. 팩토리얼 : n! = n x (n-1) x (n-2) x (n-3) x ··· x 3 x 2 x 1 = nPn

1) 순열을 이용해 푸는 방법

>>> num = {1, 2, 3, 4, 5} #데이터를 정의한다
>>> A = set(intertools.permutations(num, 5)) #num중에서 다섯 개를 선택하는 순열
>>> len(A) #A에 있는 원소 수 
120 


2) 팩토리얼을 이용해 푸는 방법

>>> import math #math 함수를 불러온다 
>>> math.factorial(5) #5! 구하는 명령문 
120 

 

 

4. 중복 순열 : n(파이)r = n ^r 

>>> num = {1, 2, 3, 4, 5} #데이터를 정의한다
>>> A = set(intertools.product(num, num, num)) 
#중복순열이므로 단순 숫자로 표시하지 않음
#num에서 세 개를 선택하는 중복순열 명령문 

>>> len(A) #집합 A에 있는 원소 수 
125

>>> for a in A: #집합 A에 있는 모든 원소에 접근하는 루프 
...   print(a) 
...
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
 ~중략~
(5, 5, 3)
(5, 5, 4)
(5, 5, 5)

 

 

5. 조합 : nCr = nPr / r!

1) 1~5까지의 숫자 중 세개의 숫자를 선택하는 경우 

>>> num = { 1, 2, 3, 4, 5 } #데이터 정의
>>> A = set(intertools.combinations(num, 3)) #num에 있는 숫자 중에서 세 개를 선택하는 조합
>>> len(A) #조합의 가짓수 확인
10

>>> for a in A #집합 A에 있는 모든 원소에 접근하는 루프 
...   print(a) #모든 원소 조합을 나타내라 


...
(2, 3, 5)
(1, 2, 3)
(1, 3, 5)
(1, 4, 5)
(1, 2, 4)
(1, 3, 4)
(2, 4, 5)
(3, 4, 5)
(2, 3, 4)
(1, 2, 5)



2) 두 주사위에서 서로 다른 숫자가 나오는 경우 

>>> dice = {1, 2, 3, 4, 5, 6} #주사위의 숫자를 지정
>>> A = set(intertools.combinations(dice, 2)) #dice에서 두 개의 숫자를 선택하는 조합
>>> len(A) #조합의 가짓수 학인 
15

 

 

'파이썬으로 다시 배우는 핵심고등수학 (python) > 06장 : 집합과 확률' 카테고리의 다른 글

6-3. 확률  (0) 2021.02.10
6-1. 집합  (0) 2021.02.09

1. python에서 집합의 특징 다루기 

>>> A = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #집합 A 지정
>>> B = { 1, 3, 2, 4, 5, 7, 6, 8, 10, 9 } #집합 B 지정
>>> A == B #두 집합이 같은가? 
True 
>>> A #집합 A를 나타내라 
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

>>> A.add(10) #집합 A에 원소 10을 추가해라 
>>> A #업데이트된 집합 A를 나타내라 
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #10이 추가된 것을 확인할 수 있음

>>> len(A) #집합 A의 원소수를 조사하는 명령어 
10 #집합 A에 포함된 원소는 총 10개 

 

 

2. 전체 집합과 부분 집합 

>>> U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #집합 U를 정의 : 전체 집합
>>> A = { 2, 4, 6, 8, 10 } #집합 A를 정의 : 집합 U의 부분 집합 
>>> A <= U #집합 A가 집합 U에 포함되는지 확인하는 명령문 
True

 

 

3. 교집합 

>>> A = { 2, 4, 6, 8, 10 } #집합 A를 지정
>>> B = { 3, 6, 9 } #집합 B를 지정
>>> A & B #집합 A와 B의 교집합을 구하는 명령어 
{6} #원소 6만이 교집합에 포함되는 것을 알 수 있음 

 

 

4. 합집합

>>> A = { 2, 4, 6, 8, 10 } #집합 A를 지정
>>> B = { 3, 6, 9 } #집합 B를 지정
>>> A | B #집합 A와 B의 합집합을 구하는 명령어 
{2, 3, 4, 5, 6, 8, 9, 10} #합집합

 

 

5. 차집합 

>>> A = { 2, 4, 6, 8, 10 } #집합 A 지정
>>> B = { 3, 6, 9 } #집합 B 지정

>>> A - B #집합 A에서 집합 B의 원소를 제외해라 
{ 2, 4, 8, 10 } 

>>> B - A #집합 B에서 집합 A의 원소를 제외해라 
{3, 9}

 

 

6. 대칭차 : 두 집합에 있는 모든 원소에서 공통된 원소를 제외한 것 

>>> A = { 2, 4, 6, 8, 10 } #집합 A 지정
>>> B = { 3, 6, 9 } #집합 B 지정
>>> A ^ B #집합 A와 집합 B의 대칭차를 구하라 
{ 2, 3, 4, 8, 9, 10 }

 

 

7. 공집합 : 두 집합의 교집합이 없을 때 (공통된 원소가 없을 때)

>>> X = { 1, 2, 3 } #집합 X 지정
>>> Y = { 4, 5, 6 } #집합 Y 지정
>>> X & Y #집합 X와 Y의 교집합을 구하라
set( ) #둘이 공통된 원소가 없으므로 공집합 

 

 

1. 벡터와 행렬의 관계

1) 점 P(3, 2)와 행렬A([2, 0],

                            [1, 2])를 곱하면 새로운 행렬 B가 나옴 

① import numpy as np ← numpy 모듈을 np로 불러오겠음

 

② p = np.matrix([[3], [2]]) ← 2 x 1의 행렬이므로 점 P를 행렬(matrix)로 표시 

    A = np. matrix)[[2, 0], [1, 2]]) ← 행렬 A 입력

 

③ A * P ← 행렬의 곱 

 

④ matrix([[6], [7]]) ← 새로운 행렬 B 나옴. 즉, 벡터의 끝 점이 바뀐 것 

 

 

 

2. 도형의 대칭이동 

1) x축에 대해 선대칭으로 변환

  - x축에 대해 선 대칭은 x값의 부호는 그대로, y값의 부호는 반대가 됨 

  - 따라서 변환 행렬(단위 행렬)을 가지고 오고, y값이 부호가 반대이므로 A = ([1, 0],

                                                                                                     [0, -1])을 곱해야 함 

 

 

① %matplotlib inline 

    import numpy as np ← numpy 모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러오겠음

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1]])  ← <A → B → C → A> 순서로 그림을 그렸으므로 이 순서로 좌표 입력

    A = np.matrix([[1, 0], [0, -1]]) ← x축 대칭인 변환행렬 

 

③ p2 = A * p ← 변환한 행렬 

    print(p2) ← x축에 대해 대칭으로 변환된 행렬 p2를 보여라 

 

④ p= np. array(p) 

    p2 = np.array(p2) ← p와 p2를 이차원 행렬로 배열하라

                                (원래 2 x 4 였음 따라서 우린 x와 y만 있는 2차원에 이것을 그릴것)

   

⑤ plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫 번째 행과 두 번째 행을 그려라

                                     (즉 x좌표와 y좌표, 코딩에서 숫자는 항상 0부터 시작)

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫 번째 행과 두 번째 행을 그려라  

    plt.axis('equal') ← x와 y축을 동등한 크기로 맞춰라 

    plt.grid(color='0.8') ← 간격을 0.8의 굵기로 그려라 

    plt.show( ) ← 보여줘라 

     

 

 

 

2) y축에 대해 선대칭

  - y축에 대해 선 대칭은 y값의 부호는 그대로, x값의 부호는 반대가 됨 

  - 따라서 변환 행렬(단위 행렬)을 가지고 오고, x값이 부호가 반대이므로 A = ([-1, 0],

                                                                                                     [0, 1])을 곱해야 함 

① (import numpy as np) ← numpy 모듈을 np로 불러오겠음

 

② p = np.matrix([[1, 3, 3], [1, 1, 2]]) ← 삼각형 ABC의 좌표 넣어 행렬 입력

    A = np. matrix)[[-1, 0], [0, 1]]) ← y축에 선대칭인 변환행렬 입력

 

③ A * P ← 선대칭한 행렬 

 

④ matrix([[-1, -3, -3], [1, 1, 2]])

 

 

 

3) 원점에 대해 선대칭

① (import numpy as np) ← numpy모듈을 np로 불러오겠음

 

② p = np.matrix([[1, 3, 3], [1, 1, 2]]) ← 삼각형 ABC의 좌표를 입력한 행렬 입력

    A = np. matrix)[[-1, 0], [0, -1]]) ← 원점이므로 모든 부호가 바뀐 변환행렬 입력

 

③ A * P ← 원점에 대해 선대칭된 행렬을 구해라 

 

④ matrix([[-1, -3, -3], [-1, -1, -2]])

 

 

 

4) 직선 y = x에 대해 선대칭

① (import numpy as np) ← numpy 모듈을 np로 불러와라

 

② p = np.matrix([[1, 3, 3], [-1, -1, 0]]) ← 삼각형 ABC의 좌표를 입력한 행렬을 입력해라 

    A = np. matrix)[[0, 1], [1, 0]]) ← y=x에 대한 선대칭으므로 둘의 위치가 바뀐 변환 행렬을 입력하라 

 

③ A * P ← y = x에 대해 선대칭된 행렬을 구하라 

 

④ matrix([[-1, -1, 0], [1, 3, 3]])

 

 

 

3.  도형을 확대하고 축소하기 

① %matplotlib inline 

    import numpy as np ← numpy 모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러오겠음

 

② p = np.matrix([[1, 1, 2, 1], [3, 1, 1, 3]]) ← 삼각형 ABC (그리는 순서대로 좌표 입력) 좌표를 입력한 행렬 입력

    A = np.matrix([[3, 0], [0, 3]]) ← 3배를 확대시키고 싶은 것이므로 변환행렬에 실수배 3을 곱하면 됨. 

 

③ p2 = A * p ← 3배 확대된 행렬 구해라

    print(p2) ← 3배 확대된 행렬을 보여줘라 

 

④ p= np. array(p) ← p의 배열을 이차원으로 나타내라 

    p2 = np.array(p2) ← p2의 배열을 이차원으로 나타내라 

 

⑤ plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫 번째 행과 두 번째 행을 그려라 (x좌표, y좌표)

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫 번째 행과 두 번째 행을 그려라 

    plt.axis('equal') ← x와 y의 크기는 균일하게 맞춰라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자무늬를 그려라 

    plt.show( ) ← 보여줘라 

 

 

 

4. 도형을 회전시키기 

1) 회전 행렬을 만드는 방법

① %matplotlib inline

    import numpy as np ← numpy모듈을 np로 불러와라

    import matplotlib.pyplot as plt ← pyplot을 plt로 가져와라 

 

② p = np.matrix([[3, 3, 5, 5, 3], [3, 1, 1, 3, 3]]) ← 사각형 ABCD의 좌표를 행렬로 입력해라 

 

③ th = np.radians(45) ← 반 시계방향으로 45도 회전해라 (도수법을 호도법으로 전환) 

    A = np.matrix([[np.cos(th), np.sin(-th)], [np.sin(th), np.cos(th)]]) ← 위의 회전행렬을 입력

 

④ p2 = A * p ← 반 시계방향으로 45도 회전한 행렬 구하기

    print(p2) ← 반 시계방향으로 45도 회전한 행렬을 나타내라 

 

⑤ p = np.array(p) ← p를 이차원 배열로 나타내라 

    p2 = np.array(p2) ← p2를 이차원 배열로 나타내라

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라 

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축을 균일하게 맞춰라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자 무늬를 넣어라 

    plt.show( ) ← 보여줘라 

 

 

5. 2 X 2 행렬이 아닌 3 X 3 행렬 사용하기

1) 대칭 이동이나 확대 및 축소할 땐 변환 행렬을 2x2 행렬을 사용했지만 평행 이동시 3x3의 행렬을 이용해야 함

   (평행 이동은 덧셈이기 때문)

 

2) 그렇기 때문에 동차 좌표 방식을 도입

  - 일반적인  이차원 좌표 (x, y)에 매개변수 w 도입하여 (wx, wy, w)라고 표현 

  - 매개변수 w 값은 항상 1이므로 x와 y값은 변화하지 않음 

 

 

3) 삼각형 ABC를 x축 방향으로 2만큼 평행이동, y축 방향으로 3만큼 평행이동 하는 방법 

  - 동차좌표로 표현하면 → ([1, 0, 2], 

                                    [0, 1, 3],

                                    [0, 0, 1]) 

① %matplotlib inline 

    import numpy as np → numpy모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt → pyplot을 plt로 불러오겠음 

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1], [1, 1, 1, 1]]) ← 삼각형 ABC (그리는 순서대로) 행렬 입력

    A = np.matrix([[1, 0, 2], [0, 1, 3], [0, 0, 1]]) ← 동차좌표를 이용해 평행이동을 하는 변환 행렬 입력

 

③ p2 = A * p ← 변환된 행렬 구하기 

    print(p2) ← 변환된 행렬 나타내라 

 

④ p = np.array(p) ← 행렬 p를 이차원 배열로 나타내라

    p2 = np.array(p2) ← 행렬 p2를 이차원 배열로 나타내라 

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축의 크기를 균일하게 맞추어라 

    plt.grid(color='0.8') ← 격자무늬를 0.8의 굵기로 그려라 

    plt.show( ) ←보여줘라 

 

 

 

6. 일차변환의 조합 

 

1) 삼각형 ABC를 x축 방향으로 2만큼, y축 방향으로 3만큼 평행이동한 후에 반 시계 방향으로 90도 회전시키기 

① %matplotlib inline

    import numpy as np ← numpy 모듈을 np로 불러와라

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러와라 

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1], [1, 1, 1, 1]]) ← 삼각형ABC의 좌표를 행렬로 입력하라 

 

A = np.matrix([[1, 0, 2], [0, 1, 3], [0, 0, 1]]) ← 동차좌표에서 평행이동하여 행렬을 입력해라 

    th = np.radians(90) ← 도수법을 호도법으로 전환함 

    A = np.matrix([[np.cos(th), np.sin(-th), 0], [np.sin(th), np.cos(th), 0], [0, 0, 1]]) A

         ← 동차좌표가 원래 ([1, 0, 0], [0, 1, 0], [0, 0, 1]) 이었으므로 동차좌표를 이용해 회전 행렬 입력 

 

④ p2 = B * A * p ← 평행이동하고, 회전까지 한 행렬 구하기 

    print(p2) ← 평행이동하고 회전한 행렬을 나타내라 

 

⑤ p = np.array(p) ← 행렬 p를 이차원 배열로 나타내라 

    p2 = np.array(p2) ← 행렬 p2를 이차원 배열로 나타내라 

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라 

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축의 크기를 균일하게 해라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자무늬를 그려라 

    plt.show( ) ← 보여줘라 

 

+ Recent posts