본문 바로가기

데이터 청년 캠퍼스(경남대학교)/스터디

2021-07-06

컴퓨터 비전 두 번째 과제

 

8개의 점들 중에 6개의 점을 랜덤으로 선택해서 최소제곱선? 그리기

 

import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt

랜덤으로 점을 선택하기 위한 랜덤 import

 

list = [[-2.9,35.4], [-2.1,19.7],[-0.9,5.7],[0.1,1.2],[1.1,2.1],
        [1.9,8.7],[3.1,25.7],[4.0,41.5]]

점들의 리스트 생성

 

#random.randint(0,7)

number = []

a=random.randint(0,7)


for i in range(6):
    while a in number:
        a=random.randint(0,7)
    number.append(a)
        
number.sort()
print(number)

number2 = []

b=random.randint(0,7)


for i in range(6):
    while b in number2:
        b=random.randint(0,7)
    number2.append(b)
        
number2.sort()
print(number2)

number리스트를 통해 점(list) 리스트의 인덱스로 점들에 접근 할 것!

한 리스트에서 같은 점이 반복되지 않도록 리스트 작성

number 리스트는 나중에 그릴 그래프를 위해 순서대로 정렬

 

a = np.array([list[number[0]],list[number[1]],list[number[2]]
             ,list[number[3]],list[number[4]],list[number[5]]])

b = np.array([list[number2[0]],list[number2[1]],list[number2[2]]
             ,list[number2[3]],list[number2[4]],list[number2[5]]])

각각의 점들 저장

 

x = a[:,0]
y = a[:,1]

plt.scatter(x,y, c = 'black', s= 100)
plt.show()

x2 = b[:,0]
y2 = b[:,1]

plt.scatter(x2,y2, c = 'red', s= 100)
plt.show()

scatter로 점 찍기

 

a, b, c = np.polyfit(x, y, 2)
print(a, b, c)

a2, b2, c2 = np.polyfit(x2, y2, 2)
print(a2, b2, c2)

점들로 가장 유사한 2차함수의 계수들 구하기

 

for i in range(6):
    fit_y = a*x**2 + b*x + c
    
plt.scatter(x,y)
plt.plot(x, fit_y)
plt.show()

for i in range(6):
    fit_y2 = a2*x2**2 + b2*x2 + c2
    
plt.scatter(x2,y2)
plt.plot(x2, fit_y2)
plt.show()

점들을 직선으로 잇기

 

X = np.arange(-4,5,0.1)
Y = [a*val**2+b*val+c for val in X]

plt.scatter(x,y)
plt.plot(X,Y)
plt.show()


Y2 = [a2*val**2+b2*val+c2 for val in X]

plt.scatter(x2,y2)
plt.plot(X,Y2)
plt.show()

최소제곱 곡선과 점들을 찍어서 확인하기

 

plt.plot(X, Y, X, Y2, 'r--')
plt.show()

최소제곱곡선 두 개를 동시에 나타내기

'데이터 청년 캠퍼스(경남대학교) > 스터디' 카테고리의 다른 글

2021-07-12  (0) 2021.07.12
2021 - 07 - 07  (0) 2021.07.07
2021-07-05  (0) 2021.07.05
2021-07-01  (0) 2021.07.02
2021 - 06 - 30  (0) 2021.07.01