Vector : 원소들이 모인 집합으로 1차원 배열에 속하고, 각원소의 데이터 타입이 동일. Series
array : 벡터들을 모아놓은 데이터 집합으로 2차원의 배열이고, Matrix라 불린다.
Tensor: 백터에 높이를 추가한 형태로 같은 크기의 행렬들을 모아놓은 데이터 집합
Numpy 배열 ndarray
ndarray :
N차원(Dimension) 배열(Array) 객체다.
위 그림과 같이 1~3차원 뿐만 아니라, 4,5,6 이상의 다차원을 표현할 수 있다.
1차원은 원소로만 이루어져 있고, 2차원은 행과 열 형태, 3차원부터는행과 열, 높이를 가진 입체형태다.
NumPy :
Numerical Python의 줄임말로 고성능 수치 계산을 위한 파이썬의 패키지다.
넘파이는 ndarray 기반의 다양한 연산기능을 제공한다.
ndarray 생성방법
주피터노트북(Jupyternotebook)을 생성하고 넘파이 모듈을 불러온다.
넘파이만 불러와도 되지만 as np를 추가하여 약어로 모듈을 표현한다.
다음 Numpy 모듈에서array()함수를 생성하여 1차원의 단일list 혹은 복합 list를 입력한다.
ndarray의 shape는 ndarray.shape로 차원은 ndarray.ndim 속성으로 알 수 있다.
#넘파이 불러오기
import numpy as np
array1 = np.array([1,2,3])
print('array1 type:',type(array1)) #<class 'numpy.ndarray'>
#array1은 1차원 데이터로, (3, )의 shape을 가진다.
print('array1 array 형태:',array1.shape)
# ndarray 내의 데이터 타입을 확인 가능
print('array1 array 데이터 타입:', array.dtype)
array2 = np.array([[1,2,3], [2,3,4]])
print('array2 type:',type(array2)) #<class 'numpy.ndarray'>
print('array2 array 형태:',array2.shape)
# ndarray 내의 데이터 타입을 확인 가능
print('array2 array 데이터 타입:', array3.dtype)
array3 = np.array([[1,2,3]])
print('array3 type:',type(array3)) #<class 'numpy.ndarray'>
#array3는 2차원 데이터로 (1, 3)의 shape을 가진다.
print('array3 array 형태:',array3.shape)
# ndarray 내의 데이터 타입을 확인 가능
print('array3 array 데이터 타입:', array3.dtype)
ㅇ
ndarray 데이터 값은 숫자,문자,불(bool) 값 등 모두 가능하다.
그러나 ndarray 데이터 타입은 그 연산의 특성상 같은 데이터 타입만 가능하다. 즉 한개 ndarrat 객체에 int와 float가 함께 있을 수 없다. error는 생기지 않은나 만약에 list 1과 같이 [1,2,'test'] 와 같이 문자와 숫자가 같은 리스트 안에 있을때, array 함수의 입력값에 들어가게 되면 사이즈가 큰 문자열로 바뀌게 된다.
전체를 더하게 되면 15가 나오고, axis0 방향, 행 방향으로 더하게 되면 [3,5,7] 의 결과가, axis1 컬럼 방향으로 더하게 되면 [6,9]가 나온다.
ndarray 간편하게 생성하는법 (arnage, zeros, ones)
특정 크기의 차원을 가진 ndarray 의 값이 연속적이나 0 혹은 1로 생성해야 될 경우 arrange(), zeros(),ones()를 이용해 쉽게 array를 생성한다. 주로 테스트용도나 대규모 데이터를 일괄적으로 초기화 할때 자주 사용된다.
#0부터 하나씩 값을 증가해가며 9까지 10개 원소를 가진 1차원의 list를 생성
np.arange(10) #[0,1,2,3,4,5,6,7,8,9]
#start =1 부터 종료 index -1 까지 ndarray를 생성
np.arange(1,10) #array([1, 2, 3, 4, 5, 6, 7, 8, 9])
#np.zeros example
#3행 2열 형태의 데이터 값이 0인 ndarray 생
zero_array = np.zeros((3,2),dtype='int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)
#np.ones example
#3행 2열 형태의 데이터 값이 1인 형태인 ndarray 생
one_array = np.ones((3,2))
print(one_array)
print(one_array.dtype, one_array.shape)
#인덱스를 사용해 단일 값 추출
print(array1d[2])
print('맨 뒤의 값:',array1[-1], ', 맨 뒤에서 두번째 값:',array1[-2])
ndarray 차원,크기를 변경- reshape()
reshape()는 ndarray를 특정 차원 및 형태로 변환해준다.
위 그림과 같이 (2,3) 의 ndarray를 (1,6)형태로 변환하고 싶을때 사용하면 된다.
예를들어 종종 reshape(-1,3)와 같이 인자값이 -1이 들어가는 경우가 있는데, 이는 axis 크기를 가변적으로 변하고 인자값 3에 해당하는 axis 크기만 고정하여 shape를 변환한다.
array1=np.array([[8,9,10], [12,13,14]])
array1.reshape(4,3)
output:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-01b483b3320f> in <module>
1 array1=np.array([[8,9,10], [12,13,14]])
----> 2 array1.reshape(4,3)
ValueError: cannot reshape array of size 6 into shape (4,3)
array1.reshape(-1,-1)
output:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-316fa50b9ed1> in <module>
----> 1 array1.reshape(-1,-1)
ValueError: can only specify one unknown dimension
ndarray 데이터 세트 선택- Indexing
ndarray의 일부 데이터 세트나 특정 데이터만을 선택하여 필터링 해는 인덱싱에 대해 알아보겠다.
인덱싱 유형
단일값 추출:
ndarray는 axis 를 기준으로 0부터 시작하는 위치 인덱스 값을 가지고 있다.
보통 해당 인덱스 값을 [](브리킷)에 명시하여 값을 추출한다.
[-1]과 같이 마이너스가 인덱스로 사용되면 맨뒤에서 위치를 지정한다.
import numpy as np
a = np.array([1, 2, 4, 8, 16, 32])
print(a.shape)
print(a[2])
print(a[-1])
output:
(6,)
4
32
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
print(array2d)
print('(row=0,col=0) index 가리키는 값:', array2d[0,0] )
print('(row=0,col=1) index 가리키는 값:', array2d[0,1] )
print('(row=1,col=0) index 가리키는 값:', array2d[1,0] )
print('(row=2,col=2) index 가리키는 값:', array2d[2,2] )
output:
[[1 2 3]
[4 5 6]
[7 8 9]]
(row=0,col=0) index 가리키는 값: 1
(row=0,col=1) index 가리키는 값: 2
(row=1,col=0) index 가리키는 값: 4
(row=2,col=2) index 가리키는 값: 9
슬라이싱
슬라이싱은 : 을 이용하여 연속된 값을 선택한다.
콜른을 기준으로 앞에 오는숫자는 시작 인데스, 뒤에오는 숫자는 종료 인덱스인데, 주의할점이 종료인덱스-1 까지의 값을 반환한다. 콜론앞에 시작인덱스가 없다면 맨처음 인덱스 위치를 말하고, 콜른 뒤에 역시 없다면 마찬가지로 마지막 인덱스 위치를 말한다. 슬라이싱 역시 다차원에서 사용이 가능하다.