라이브러리 : 특정 목적에 맞는 함수나 메소드들을 모아 놓은 집합
import numpy as np
a = [10, 20, 30, 40, 50]
a
> [10, 20, 30, 40, 50]
type(a)
> list
b = np.array(a) # 리스트를 넘파이로 가져올 수 있음
b
> array([10, 20, 30, 40, 50])
print(b)
> [10 20 30 40 50]
b.shape # 형성된 데이터 구조가 어떤 형태인지 보는 것, 1차원이고 5개의 값으로 구성되어있다~ 1차원일 때는 숫자만큼 원소개수, 공란
> (5,)
c = np.array([5, 4, 3, 2, 1])
c
> array([5, 4, 3, 2, 1])
b + c # 동일한 위치에 있는 원소값들끼리 덧셈 연산, 리스트는 이어붙이는 형태
> array([15, 24, 33, 42, 51])
b + 5 # 각각의 원소에 5를 더해줌, 리스트에서는 불가능
> array([15, 25, 35, 45, 55])
np.sum(b)
> 150
np.mean(b)
> 30.0
np.max(b)
> 50
np.min(b)
> 10
c = b / 3
c
> array([ 3.33333333, 6.66666667, 10. , 13.33333333, 16.66666667])
np.round(c,1) # c라는 array를 소수점 첫 번째자리까지 반올림
> array([ 3.3, 6.7, 10. , 13.3, 16.7])
np.round(c,0)
> array([ 3., 7., 10., 13., 17.])
b[0]
> 10
b[-1]
> 50
b[1:3]
> array([20, 30])
b[:2]
> array([10, 20])
np.sum(b[2:]) # b array에서 3번째 이후에 합
> 120
np.mean(b[2:])
> 40.0
b[1] = 200 # 특정값 바꾸기도 가능
b
> array([ 10, 200, 30, 40, 50])
d = np.arange(5) # 숫자 하나만 넣었을 때는 0부터 (가로안에 숫자-1)까지, range와 비슷
d
> array([0, 1, 2, 3, 4])
e = np.arange(3,8) # 숫자 두개 넣었을 때는 첫번째 숫자부터 (두번째 숫자-1)까지
e
> array([3, 4, 5, 6, 7])
f = np.arange(3,8,2) # 숫자 세개를 넣었을 때는 첫번째 숫자부터 (두번째 숫자-1)까지 세번쨰 숫자 간격으로
f
> array([3, 5, 7])
g = np.zeros(5)
g
> array([0., 0., 0., 0., 0.])
h = np.ones(5)
h
> array([1., 1., 1., 1., 1.])
b
> array([ 10, 200, 30, 40, 50])
bb = b
bb
> array([ 10, 200, 30, 40, 50])
bb[0] = 100
bb
> array([100, 200, 30, 40, 50])
b # 리스트에서 발생했던 복사의 문제가 여기서도 발생
> array([100, 200, 30, 40, 50])
b == bb
> array([ True, True, True, True, True])
bb = b.copy()
bb
> array([100, 200, 30, 40, 50])
b[2] = 300
b
> array([100, 200, 300, 40, 50])
bb
> array([100, 200, 30, 40, 50])
b == bb
> array([ True, True, False, True, True])
import numpy as np
a = np.array([[10, 20, 30, 40], [50, 60, 70, 80]])
a # 행 먼저, 숫자는 0부터
> array([[10, 20, 30, 40],
[50, 60, 70, 80]])
a.shape # 2행 4열
> (2, 4)
b, c = a.shape # 행/열의 값 따로 끈헝서 저장하기
b
> 2
c
> 4
a[0,0]
> 10
a[-1,-1]
> 80
a[1, 1:] # 두번째행 두번째부터 전부
> array([60, 70, 80])
a # 값에 영향을 주지는 않음
> array([[10, 20, 30, 40],
[50, 60, 70, 80]])
a[0,1] = 2
a
> array([[10, 2, 30, 40],
[50, 60, 70, 80]])
b = np.zeros((2,4))
b # 2행 4열
> array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
c = np.ones((3,5))
c # 3행 5열
> array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
c = np.arange(8)
c
> array([0, 1, 2, 3, 4, 5, 6, 7])
c.reshape(2,4) # c array를 몇행, 몇열로 만들어라
> array([[0, 1, 2, 3],
[4, 5, 6, 7]])
c # 따로 저장을 안했기 떄문에 영향을 안줌
> array([0, 1, 2, 3, 4, 5, 6, 7])
c = c.reshape(2,4)
c
> array([[0, 1, 2, 3],
[4, 5, 6, 7]])
c = c.reshape(4,2)
c
> array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
c.sum()
> 28
d = c.copy() # 의도가 있지 않은 이상, copy사용
d[0,0] = 10
d
> array([[10, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]])
c
> array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
c == d
> array([[False, True],
[ True, True],
[ True, True],
[ True, True]])
e = np.arange(49).reshape(7,7) # 바로 한번에 할 수 있음
e
> array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27],
[28, 29, 30, 31, 32, 33, 34],
[35, 36, 37, 38, 39, 40, 41],
[42, 43, 44, 45, 46, 47, 48]])
e[:,1:3] # 행 전부와 2,3번째 열, 일부만 가져오기
> array([[ 1, 2],
[ 8, 9],
[15, 16],
[22, 23],
[29, 30],
[36, 37],
[43, 44]])
e[3: , :4]
> array([[21, 22, 23, 24],
[28, 29, 30, 31],
[35, 36, 37, 38],
[42, 43, 44, 45]])
e[3: , :4].sum()
> 528
f = e[3: , :4].copy()
f
> array([[21, 22, 23, 24],
[28, 29, 30, 31],
[35, 36, 37, 38],
[42, 43, 44, 45]])
e[4,0] = 100
e
> array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13],
[ 14, 15, 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25, 26, 27],
[100, 29, 30, 31, 32, 33, 34],
[ 35, 36, 37, 38, 39, 40, 41],
[ 42, 43, 44, 45, 46, 47, 48]])
f
> array([[21, 22, 23, 24],
[28, 29, 30, 31],
[35, 36, 37, 38],
[42, 43, 44, 45]])
f.sum()
> 528
numpy as np
import numpy as np
a = np.arange(5, 45, 5).reshape(2,4)
b = np.arange(20, 36, 2).reshape(2,4)
a
> array([[ 5, 10, 15, 20],
[25, 30, 35, 40]])
b
> array([[20, 22, 24, 26],
[28, 30, 32, 34]])
a + b # 행과 열의 크기가 같을 때 가능
> array([[25, 32, 39, 46],
[53, 60, 67, 74]])
b - a
> array([[15, 12, 9, 6],
[ 3, 0, -3, -6]])
a * b
> array([[ 100, 220, 360, 520],
[ 700, 900, 1120, 1360]])
a / b
> array([[0.25 , 0.45454545, 0.625 , 0.76923077],
[0.89285714, 1. , 1.09375 , 1.17647059]])
a // b
> array([[0, 0, 0, 0],
[0, 1, 1, 1]], dtype=int32)
a % b
> array([[ 5, 10, 15, 20],
[25, 0, 3, 6]], dtype=int32)
a * 10
> array([[ 50, 100, 150, 200],
[250, 300, 350, 400]])
a # a 자체에는 영향 x
> array([[ 5, 10, 15, 20],
[25, 30, 35, 40]])
c = a * 10
c
> array([[ 50, 100, 150, 200],
[250, 300, 350, 400]])
b
> array([[20, 22, 24, 26],
[28, 30, 32, 34]])
bb = b.reshape(4, 2)
bb # 앞서 만든 a,c 행렬과의 곱셈이 가능, 행렬곱은 앞의 행렬의 열의 개수, 뒤의 행렬의 행의 개수
> array([[20, 22],
[24, 26],
[28, 30],
[32, 34]])
a @ bb # 행렬곱 (a 1행* b 1열),(a 1행, b 2열), (a 2행* b 1열),(a 2행, b 2열)
> array([[1400, 1500],
[3480, 3740]])
a = np.arange(1,15)
a
> array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
a > 10
> array([False, False, False, False, False, False, False, False, False,
False, True, True, True, True])
a == 5 # 5의 위치
> array([False, False, False, False, True, False, False, False, False,
False, False, False, False, False])
a[a > 5] # 5보다 큰 값들을 출력해줌
> array([ 6, 7, 8, 9, 10, 11, 12, 13, 14])
a[a < 5] = 5 # 5보다 작은 원소들은 5로 바꿔줘라, 튀는 값들을 바꿀 때 사용하면 좋음
a
> array([ 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
a[a > 10] = 10
a
> array([ 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 10, 10, 10, 10])