HappyWeasel
파이썬 - Numpy 본문
Numerical Python
- Python에서 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러.
- 파이썬 리스트로도 계산 할 수 있지만 numpy는 list에 비해서 빠른 연산을 지원하고
메모리를 효율적으로 사용한다. - 리스트와 다르게 array는 단일 타입으로 구성된다.
list(range(10))
# [0,1,2,3,4,5,6,7,8,9]
import numpy as np
np.array([1,2,3,4,5])
#리스트를 array로 변환
#array([1,2,3,4,5])
배열 만들기
np.array([1, 2, 3, 4, 5])
# array([1, 2, 3, 4, 5])
np.array([3, 1.4, 2, 3, 4])
# array([3. , 1.4 , 2. , 3. , 4.])
# 리스트 원소 중에 실수가 있으면 모든 원소는 실수가 된다.
np.array([1, 2, 3, 4], dtype='float')
# array([1. , 2. , 3. , 4. ])
arr = np.array([1, 2, 3, 4], dtype='float')
arr.dtype
#아래와 같이 출력
# dtype('float64')
arr.astype(int)
# int로 데이터 타입 변경
# array([1, 2, 3, 4])
배열 데이터 타입 dtype
dtype | 설명 | 다양한 표현 |
int | 정수형 타입 | i, int_, int32, int64, i8 |
float | 실수형 타입 | f, float_, flaot32, float64, f8 |
str | 문자열 타입 | str, U, U32 |
bool | 부울 타입 | ?, bool_ |
np.zeros(10, dtype=int)
# 0으로 10개의 원소를 생성
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.ones((3,5), dtype=float)
'''
1로 다중 배열 생성 (3X5배열)
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
'''
np.arange(0, 20, 2)
# 0 ~ 20까지 2씩 증가하는 원소 생성
# array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 ])
np.linspace(0, 1, 5)
# 0 ~ 1사이를 5개로 나눠서 생성
# array([0., 0.25, 0.5, 0.75, 1.])
난수로 채워진 배열 만들기
np.random.random((2,2))
'''
랜덤으로 2X2 배열 요소를 생성
array([[0.1321545646, 0.81131345324],
[0.8441541561, 0.15649849545]])
'''
np.random.normal(0, 1, (2, 2))
# 정규분포로 데이터를 뽑아낸다.
# 평균이 0이고 표준편차가 1인 2X2배열을 생성한다.
'''
array([[ 0.44050683, 0.04912487]],
[ -1.67023947, -0.70982067]])
'''
np.random.randint(0, 10, (2, 2))
# int 타입으로 2X2 배열 생성
'''
array([[3, 9],
[3, 2]])
'''
배열의 기초
x2 = np.random.randint(10, size = (3, 4))
'''
array([[2, 2, 9, 0],
[4, 2, 1, 0],
[1, 8, 7, 3]])
'''
# 행렬의 속성을 알 수 있다.
x2.ndim # 2 2차원 배열이다.
x2.shape # (3, 4) 3X4 배열이다.
x2.size # 12 원소가 몇 개 들어있는지.
x2.dtype # dtype('int64') 타입을 알 수 있다.
찾고 잘라내기
x = np.arange(7)
# array([0, 1, 2, 3, 4, 5, 6])
x[3]
# 3
x[7]
# IndexError: index 7 is out of bounds
x[0] = 10
# array([10, 1, 2, 3, 4, 5, 6])
x[0] = 0
x[1:4]
# array([1,2,3])
x[1:]
# array([1,2,3,4,5,6])
x[:4]
# array([0,1,2,3])
x[::2]
# 2씩 건너 뛰면서 출력
# array([0,2,4,6])
모양 바꾸기
- reshape : array의 shape을 변경한다.
x = np.arange(8)
'''
array([0,1,2,3,4,5,6,7])
'''
x.shape
# (8,)
x2 = x.reshap((2, 4))
# 배열의 모양을 바꾼다.
'''
array([[0,1,2,3],
[4,5,6,7]])
'''
x2.shape
# (2,4)
- concatenate : array를 이어 붙인다.
x = np.array([0,1,2])
y = np.array([3,4,5])
np.concatenate([x, y])
#array([0, 1, 2, 3, 4, 5])
matrix = np.arange(4).reshape(2, 2)
# axis 축을 기준으로 이어 붙일 수 있다.
# 0 : y축 / 1 : x축
np.concatenate([matrix, matrix], axis=0)
'''
[[0,1],
[2,3]]
아래와 같이 변경 된다.
[[0,1],
[2,3],
[0,1],
[2,3]]
'''
np.concatenate([matrix, matrix], axis=1)
'''
[[0,1],
[2,3]]
아래와 같이 변경 된다.
[[0,1,0,1],
[2,3,2,3]]
'''
- 나누기
matrix = np.arange(16).reshape(4,4)
upper, lower = np.split(matrix, [3], axis=0)
'''
[[0,1,2,3],
[4,5,6,7],
[8,9,10,11],
[12,13,14,15]]
아래처럼 나눠준다.
[[0,1,2,3],
[4,5,6,7],
[8,9,10,11]]
[12,13,14,15]
'''
upper, lower = np.split(matrix, [3], axis=1)
'''
[[0,1,2,3],
[4,5,6,7],
[8,9,10,11],
[12,13,14,15]]
아래처럼 나눠준다.
[[0,1,2],
[4,5,6],
[8,9,10]
[12,13,14]]
[[3],
[7],
[11],
[15]]
'''
루프는 느리다
def add_five_to_array(values):
output = np.empty(len(values))
for i in range(len(values)):
output[i] = values[i] + 5
return output
big_array = np.random.randint(1, 100, size = 1000000000)
add_five_to_array(big_array)
# 느리다
big_array + 5
# 빠르다
- 기본 연산을 지원한다.
x = np.arange(4)
# array([0,1,2,3])
x + 5
# array([5,6,7,8])
x - 5
# array([-5,-4,-3,-2])
x * 5
# array([0, 5, 10, 15])
x / 5
# array([0. , 0,2, 0.4, 0.6])
- 행렬간 연산
x = np.arange(4).reshape((2,2))
y = np.random.randint(10, size=(2,2))
x+y
'''
array([[1,7],
[6,5]]))
'''
x-y
'''
array([[-1,-5],
[-2,1]])
'''
브로드캐스팅
- Broadcasting: shape이 다른 array끼리 연산을 지원
import numpy as np
'''
[[0]
[1]
[2]
[3]
[4]
[5]] 배열 A와
[0 1 2 3 4 5] 배열 B를 선언하고, 덧셈 연산해보세요.
'''
A = np.arange(6).reshape(6,1)
B = np.arange(6)
print(A + B)
집계함수
- 집계: 데이터에 대한 요약 통계를 볼 수 있다.
x = np.arange(8).reshape((2,4))
np.sum(x)
# 모든 원소의 합 : 28
np.min(x)
# 최솟값 : 0
np.max(x)
# 최대값 : 7
np.mean(x)
# 평균 : 3.5
np.std(x)
# 표준편차
x = np.arange(8).reshape((2,4))
np.sum(x, axis=0)
# y축으로 덧셈
# array([ 4, 6, 8, 10])
np.sum(x, axis=1)
# x축으로 덧셈
# array([6, 22])
마스킹연산
- True, False array를 통해서 특정 값들을 뽑아내는 방법
x = np.range(5)
# array([0, 1, 2, 3, 4])
x < 3
# array([ True, True, True, False, False])
x > 5
# array([False, False, False, False, False])
x[x < 3]
# index 자리에 조건식을 넣으면 조건이 True인 array 원소를 반환한다.
# array([0, 1, 2])
import numpy as np
daily_liar_data = [0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]
# 양치기 소년이 거짓말을 몇 번 했는지 구하여 출력해주세요.
def main() :
# 해당하는 코드 작성
liar_array = np.array(daily_liar_data)
print(len(liar_array[liar_array == 0]))
print(np.count_nonzero(liar_array==0))
if __name__ == "__main__" :
main()
np.count_nonzero : none이거나 false가 아닌 데이터를 카운터 해주는 함수
'Basic > Python' 카테고리의 다른 글
파이썬 - Pandas 2 (1) | 2020.06.29 |
---|---|
파이썬 - Pandas 1 (1) | 2020.06.06 |
파이썬 - filter (0) | 2020.06.05 |
파이썬 - map (0) | 2020.06.05 |
파이썬 - lambda (0) | 2020.06.04 |
Comments