
6강_Numpy 소개
Class를 사용하는 방법
(객체를 만들어서 직접 호출을 함)
def hi(): #def는 예약어, hi는 함수
print("하이")
print("Hello")
def hi2(object):
print("Hi! " + object + "!!")
hi2("kim")
type # 어떤 데이터의 자료형이 무엇인지를 보고자 할때, type을 이용.
# class를 만들때는 class라는 키워드를 이용.
class Person: #아래는 Person이라는 class를 구성하는 모든 요소들
def_init_(self, name): #생성자 : class를 초기화하는 method
self.name = name
print("생성자 호출")
def hello(self): #첫번째 method
print("하이!! " + self.name + " !")
def goodbye(self): #두번째 method
print("Good-bye " + self.name
예) p1 = Person("kim")
p1.hello() #method를 호출할 때
p1.goodbye()
Numpy
먼저 Numpy의 설치 과정이 필요.
cmd에서 pip3 install numpy 명령 이용
설치 후 numpy 가져오기 :
import numpy as np
Numpy : 고성능 과학계산을 위한 데이터분석(수치분석) 패키지
(주요기능 : 벡터 산술연산, 다차원 배열(ndarray. 아주많이사용되는객체), 표준수학함수, 선형대수, 난수)
numpy배열 : ndarray라는 객체를 이용함
같은 종류의 데이터를 담는 자료형 (동일한 타입의 값들을 갖는다)
rank : 배열의 차원을 의미
shape : 각 차원의 크기를 튜플로 표시한 것을 의미 (행, 렬로 표시됨)
dtype : 배열에 저장된 자료를 알려주는 객체
7강_배열 생성 함수
ndarray라는 배열객체(다차원 배열 객체)를 앞으로 numpy하는동안 계속 다루게 될 예정.
shape, rank, dtype를 이용해서 확인을 해볼 수 있음.
ndarray(다차원 배열 객체)를 생성해주는 함수 : array
>>> import numpy as np
#rank가 1인 배열을 생성하려 함
>>> a = np.array([1,2,3])#대괄호로 리스트를 만들어줌
>>> a
array([1, 2, 3])
>>> type(a)
<class 'numpy.ndarray'>
#a라는 type은 numpy의 다차원배열객체를 의미함
>>> a.shape
(3,)
# 1차원 배열의 크기를 의미. 크기값은 3이다. (행과 열의 의미가 아님)
>>> a.ndim #rank를 의미. 몇차원인지를 알고싶을때
1
# a.rank 라는 명령어는 존재하지 않음
>>> b=np.array([[1,2,3],[4,5,6]]) #2차원을 만들고 싶다면, 대괄호가 2개
>>> b.shape
(2, 3)
>>> b
array([[1, 2, 3],
[4, 5, 6]])
#2개의 행이고 3개의 열을 의미
>>> b[0,0] #1행 1열의 값이 출력
1
>>> b.ndim # b.rank라는 명령어는 없음
2
>>> type(b)
<class 'numpy.ndarray'>
#b라는 type은 numpy의 다차원배열객체를 의미함
>>> b.dtype
dtype('int32')
#32비트의 windows를 설치하였을 경우, 이렇게 출력
>>> b.dtype.name
'int32'
>>> a.dtype.name
'int32'
>>>
array([1, 2, 3])
>>> a.itemsize
4
#다차원배열 생성함수에는 array말고 arrange, reshape도 이용할 수 있음
>>> arr=np.arange(12)
>>> arr
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# numpy에서는 range대신 arange를 사용 (range는 표준 python에서 사용)
>>> arr.reshape(4,3) #형태를 바꾸어 줌
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> arr=np.arange(12).reshape(3,4)
>>> arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 0~11까지 범위를 3행4열로 만들고 싶다
>>> type(arr)
<class 'numpy.ndarray'>
>>> arr.shape
(3, 4)
>>> arr.itemsize
4
#각각 하나하나가 4bit를 차지한다
#zeros() : 0이 들어있는 배열을 생성해주는 함수
#ones() : 1이 들어있는 배열을 생성해주는 함수
>>> np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>> zero = np.zeros((2,3))
>>> zero
array([[0., 0., 0.],
[0., 0., 0.]])
>>> np.ones((3,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
#full():모든 값이 특정 상수인 배열을 생성
>>> c = np.full((3,3), 10)
>>> c
array([[10, 10, 10],
[10, 10, 10],
[10, 10, 10]])
#10으로 형성된 3행3열의 배열을 만들 수 있음
#eye() : 단위 행렬 생성
>>> d = np.eye(3)
>>> d
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
# 3행3열의 단위행렬 배열을 만들 수 있음
>>> e=np.random.random((2,2))
>>> e
array([[0.66228334, 0.07093894],
[0.4463871 , 0.25762821]])
# 임의의 수를 이용한 2행2열의 배열을 만들 수 있음
#numpy의 자료형 : float(부동소수점형), complex(복소수형), int(정수형), b
ool(문자열), string, object(객체) 가 있
8강_numpy 슬라이싱_ 정수 배열 인덱싱_ 부울 인덱싱
#배열 인덱싱
#슬라이싱 : 파이썬의 리스트와 유사하게 numpy에서도 슬라이싱이 가능하다.
>>>
>>> a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,111]])
>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 111]])
#여기서 일부분만 가져오려고 함
>>> b=a[:2, :2]
>>> b
array([[1, 2],
[5, 6]])
>>> c=a[:2,1:3]
>>> c
array([[2, 3],
[6, 7]])
#슬라이싱된 배열은 원본 배열과 같은 데이터를 참조하기 때문에,
#슬라이싱된 배열을 수정하면 원본 배열도 역시 수정이 된다.
>>> b[0,0]
1
>>> b[0,0]=100
>>> b
array([[100, 2],
[ 5, 6]])
>>> a
array([[100, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 111]])
# b를 수정했지만, 원본 배열인 a도 자동으로 같이 수정이 된다.
>>> a.ndim #차원을 의미. rank와 같은 의미
2
>>> arr1=np.array([1,2,3])
>>> arr1
array([1, 2, 3])
>>> arr1.shape
(3,)
>>> arr1.ndim
1
>>> arr2=np.array([[1,2,3]])
>>> arr2.ndim
2
>>> arr2.shape
(1, 3)
#arr1은 1차원 형태, arr2는 2차원 형태이다.
# numpy배열을 슬라이싱하면, 언제나 그 결과는 원본 배열의 부분배열이다.
#그러나, 정수배열 인덱싱을 하는 경우, 원본과 다른 배열을 만들 수 있다.
>>> a=np.array([[1,2],[3,4],[5,6]])
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
>>> a[[0,1,2],[0,1,0]]
array([1, 4, 5])
#1행1열은 1, 2행2열은 4, 3행1열은 5이므로, 1,4,5가 출력
>>> ia=a[[0,1,2],[0,1,0]]
>>> ia
array([1, 4, 5])
>>> ia.shape
(3,)
>>> a=np.array([1,2,3,4,5,6,7,8,9])
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> idx=np.array([0,0,0,0,1,1,1,2,2,2])
>>> idx
array([0, 0, 0, 0, 1, 1, 1, 2, 2, 2])
>>> a[idx]
array([1, 1, 1, 1, 2, 2, 2, 3, 3, 3])
>>> a.shape
(9,)