In [1]:
import numpy as np
# 일반 python 리스트 정의
data = [1,2,3,4,5]
data
[1, 2, 3, 4, 5]
# 일반 python 리스트 정의
data2 = [1,2,3,3.5,4]
data2
[1, 2, 3, 3.5, 4]
# numpy를 이용해서 array 정의
# 위에서 정의한 python list를 이용
arr = np.array(data)
arr
array([1, 2, 3, 4, 5])
# array의 형태(크기)를 확인
arr.shape
(5,)
# 바로 리스틀르 넣어줌으로써 array 만들기
arr2 = np.array([1,2,3,4,5])
arr2
array([1, 2, 3, 4, 5])
arr2.shape
(5,)
# array의 자료형을 확인
arr2.dtype
dtype('int32')
arr3 = np.array(data2)
arr3
array([1. , 2. , 3. , 3.5, 4. ])
arr3.shape
(5,)
arr3.dtype
dtype('float64')
arr4 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr4
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
arr4.shape
(4, 3)
numpy shape
np.shape로 해당 array의 크기를 확인할 수 있다.
shape를 확인함으로써 몇개의 데이터가 몇차원으로 존재하는지를 알 수 있다.
위에서 확인한 aar2.shape는 (5,)으로 1차원 데이터이고 5개의 요소가 있다는 것을 확인할 수 있다.
aar4의 shape는 (4,3)으로 2차원 데이터로 4행3열의 크기를 갖고 있다는 것을 알 수 있다.
numpy dtype
앞에서 살펴본 arr, arr2는 정수만 포함된 array의 자료형으로 'int32'으로 확인이 가능하며
요소들 중 실수가 표함된 arr3의 경우 float64로 나타난다.
2. np.zeors(), np.ones(), np.arrange() 함수
numpy에서는 편하게 array를 생성하는 메소드를 지원한다.
# 요소가 0인 array 데이터 생성
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
# 요소가 0인 4*3 array 데이터 생성
np.zeros((4,3))
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
# 요소가 1인 array 데이터 생성
np.ones(9)
array([1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 요소가 1인 4*3 크기의 array 데이터 생성
np.ones((4,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
# 0 ~ 9의 요소를 가진 array 데이터 생성
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 3 ~ 10의 요소를 가진 array 데이터 생성
np.arange(3, 10+1)
array([ 3, 4, 5, 6, 7, 8, 9, 10])
3. array 연산
numpy array 간 연산 시 동일한 크기의 데이터끼리 연산이 가능하며 같은 위치에 있는 요소끼리 연산된다.
arr1 = np.array([[1,2,3],[4,5,6]])
arr1
array([[1, 2, 3],
[4, 5, 6]])
arr2 = np.array([[10,11,12],[13,14,15]])
arr2
array([[10, 11, 12],
[13, 14, 15]])
arr1.shape
arr2.shape
(2, 3)
# array 덧셈
arr1 + arr2
array([[11, 13, 15],
[17, 19, 21]])
# array 곱셈
arr1 * arr2
array([[10, 22, 36],
[52, 70, 90]])
# array 뺼셈
arr1 - arr2
array([[-9, -9, -9],
[-9, -9, -9]])
# array 나눗셈
arr1 / arr2
array([[0.1 , 0.18181818, 0.25 ],
[0.30769231, 0.35714286, 0.4 ]])
4. array 연산 2 - 브로드캐스팅
numpy에서 array 연산 중 브로드캐스팅 방식의 연산이 가능하다.
서로 다른 크기의 array를 연산할 수 있다는 뜻이며 아래 예를 통해 확인할 수 있다.
arr3 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr3
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
arr4 = np.array([[10,10,10]])
arr4
array([[10, 10, 10]])
arr3.shape
(4, 3)
arr4.shape
(1, 3)
# 4*3 데이터에 1*3 데이터 더하기
arr3 + arr4
array([[11, 12, 13],
[14, 15, 16],
[17, 18, 19],
[20, 21, 22]])
arr5 = np.array([[1]])
arr5
array([[1]])
# 4*3 데이터에 1*1 데이터 더하기
arr3 + arr5
array([[ 2, 3, 4],
[ 5, 6, 7],
[ 8, 9, 10],
[11, 12, 13]])
arr6 = np.array([[1],[2],[3],[4]])
arr7 = np.array([[1,1,1,1]])
arr6
array([[1],
[2],
[3],
[4]])
arr7
array([[1, 1, 1, 1]])
# 1*4 데이터와 4*1 데이터 더하기
arr6 + arr7
array([[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5]])
1*4 크기의 데이터와 4*1 크기의 데이터를 더하면 각 행에 4*4 크기의 데이터가 되며 그 값은 각 행의 값에 각 열의 값을 더해준 값이 된다
5. array 생성 : np.full(shape, number, dtype)
full 메소드는 원하는 크기의 모든 값을 원하는 값, 원하는 데이터 타입으로 일괄 정의하는 기능을 한다.
# 1*10인 크기에 모든 값이 11인 데이터 형식은 float64를 가진 array를 생성한다
arr8 = np.full(10, 11, dtype=np.float64)
arr8
array([11., 11., 11., 11., 11., 11., 11., 11., 11., 11.])
# 크기가 5*5인 모든값이 100인 array를 생성한다.
arr9 = np.full((5,5),100)
arr9
array([[100, 100, 100, 100, 100],
[100, 100, 100, 100, 100],
[100, 100, 100, 100, 100],
[100, 100, 100, 100, 100],
[100, 100, 100, 100, 100]])