파이썬과 라이브러리_3

우주먼지·2020년 7월 9일
0

인공지능 사관학교

목록 보기
8/15

파이썬과 라이브러리

Numpy

연산자

a -[1, 2, 3]
b = [4, 5, 6]
a+b # [1, 2, 3, 4, 5, 6] 비항구적
a * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3] 비항구적

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
a + b # array([5, 7, 9])
a * 3  # arra([3, 6, 9])

리스트에서 배열의 더하기는 배열의 요소들을 이어붙여준거지만, numpy배열에서의 더하기는 인덱스가 같은 요소끼리의 합을 나타낸다. 곱하기도 마찬가지로 같은 결과를 보인다.
나누기와 빼기도 원소 별 연산인데, 리스트에는 없는 연산자이다.

np.repeat(b, 3) # array([4, 4, 4, 5, 5, 5, 6, 6, 6])
np.repeat(3 * [1, 2, 3]) # array([1, 2, 3, 1, 2, 3, 1, 2, 3])

리스트를 넣어주면 리스트의 값 전체가 반복되나, b라는 변수를 주면 한 원소당 3번씩 반복된다.

Broadcasting : 어떤 조건만 만족한다면, 모양이 다른 배열끼리 연산이 가능하도록 해주며 부족한 부분을 확장하여 연산을 수행할 수 있게 해준다. 항상 되는 것은 아니기 때문에 주의가 필요하다.

x = np.array([0, 1, 2, 3])
pow(10, x) # array([1, 10, 100, 1000, 10000, 100000], dtype=int32)
x ** 3
np.sqrt(x) # array([0., 1., 1.4141421356., 1.73205081])
np.exp(x) # array([1., 2.71828183., 7.389056., 20.08553692])

pow는 제곱승을 나타내고, sqrt는 제곱근을 나타낸다. exp는 e의 지수승을 한 값이다.

np.random.seed(123)
np.random.randint(1, 11) # 비항구적
x = np.random.randint(1, 11, size=1000)

seed 뒤에 숫자는 랜덤을 초기화 하기 위한 숫자이다. 이는 보통 임의로 지정해주나 다른 곳에서 사용할때 똑같은 랜덤값을 가져오기 위해서 설정해준다. 숫자는 1부터 11사이의 랜덤 정수하나 생성해준다. size를 명시해주면, 그 크기만큼 랜덤값을 생성해 배열에 저장해준다.

np.unique(x) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) (!= x.unique())

unique한 값만 가져옴으로 겹치지 않는 값들로 가져온다. 이는 sorted(set(x))와 같은 결과를 보인다.(집합의 중복값이 없는 성질때문에)

x = np.arange(11)
x.sum() # 55 ( =np.sum(x))
x.mean() # 5.5
x.std() # 2.87228
x.var() #8.25
np.round(np.var(x), 0) # 8
np.median(x) # 5 (!= x.meadian())
x.cumsum() # array([1, 3, 6, 10, 15, 21, 28, 36, 44, 55], dtype=int32)

sum = 합, mean = 평균, std = 표준편차, var = 분산, median = 중위수, cumsum = 누적 배열
x.함수와 np.함수(x)는 같은 결과를 보이면 같은 의미이다.

x = np.arange(1, 10)
x = x.reshape((3, -1)) # array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
x.mean(axis=0)#array([4, 5, 6])

2차원 배열에서는 axis를 지정해줌으로써 원하는 방향의 평균을 구할 수 있다. (0은 세로, 1은 가로)

np.random.seed(1234)
x = np.random.randint(1, 11, size=1000)
z>5 # array([True, False, True, True....])
(z > 5).sum() # 488
(z > 5).mean() # 0.488

True는 1, False는 0으로 변환하여 다 더해준 값이 출력된다. 평균을 출력하면 z의 배열값이 5보다 큰 숫자의 비율이 된다. 즉, z배열의 5보다 큰 수의 비율은 48.8%정도 된다.

a = np.array([2, -3, 4, 5, 7, 0, 1, -1])
a.argmin() # 1
a.argmax() # 4
a.min() # -3
a.max() # 7

argmin, argmax는 최소값, 최대값의 위치를 출력해주고, min, max는 최소값, 최대값을 출력해준다.

profile
안녕하세요 ㅎㅎ

0개의 댓글