import numpy as np
list1 = [1, 2, 3]
print('list1 type: ', type(list1))
array1 = np.array(list1)
print('array1 type: ', type(array1))
print('array1 array 형태: ', array1.shape)
array2 = np.array([[1, 2, 3], [2, 3, 4]])
print('array2 type: ', type(array2))
print('array2 array 형태: ', array2.shape)
array3 = np.array([[1, 2, 3]])
print('array3 type: ', type(array3))
print('array3 array 형태: ', array3.shape)
list1 type: <class 'list'>
array1 type: <class 'numpy.ndarray'>
array1 array 형태: (3,)
array2 type: <class 'numpy.ndarray'>
array2 array 형태: (2, 3)
array3 type: <class 'numpy.ndarray'>
array3 array 형태: (1, 3)
print('array1 : {:0}차원, array2: {:1}차원, array3 : {:2}차원' .format(array1.ndim, array2.ndim, array3.ndim))
array1 : 1차원, array2: 2차원, array3 : 2차원
ndarray내의 데이터값은 숫자 값, 문자열 값, 불 값 등이 모두 가능
숫자형의 경우 int형(8bit, 16bit, 32bit), unsigned int형(8bit, 16bit, 32bit), fload형(16bit, 32bit, 64bit, 128bit), 그리고 이보다 더 큰 숫자 값이나 정밀도를 위해 complex 타입도 제공.
ndarray내의 데이터 타입은 그 연산의 특성상 같은 데이터 타입만 가능하다. 즉, 한 개의 ndarray객체에 int와 float가 함께 있을 수 없다.
ndarray내의 데이터 타입은 ndarray.dtype으로 확인 가능.
list1 = [1,2,3]
print(type(list1))
array1 = np.array(list1)
print(type(array1))
print(array1, array1.dtype)
list2 = [1, 2, 'test']
array2 = np.array(list2)
print(array2, array2.dtype)
list3 = [1, 2, 3.0]
array3 = np.array(list3)
print(array3, array3.dtype)
<class 'list'>
<class 'numpy.ndarray'>
[1 2 3] int32
['1' '2' 'test'] < U11
[1. 2. 3.] float64
대용량 데이터 다룰 시 메모리 절약을 위해서 형변환을 특히 고려해야함.
array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64') # array_int.astype(np.float64)
print(array_float, array_float.dtype)
array_int1= array_float.astype('int32')
print(array_int1, array_int1.dtype)
array_float1 = np.array([1.1, 2.1, 3.1])
array_int2= array_float1.astype('int32')
print(array_int2, array_int2.dtype)
[1. 2. 3.] float64
[1 2 3] int32
[1 2 3] int32
sequence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
#(3, 2) shape을 가지는 모든 원소가 0, dtype은 int32 인 ndarray 생성.
zero_array = np.zeros((3, 2), dtype='int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)
#(3, 2) shape을 가지는 모든 원소가 1인 ndarray 생성. ,
one_array = np.ones((3, 2))
print(one_array)
print(one_array.dtype, one_array.shape)
[0 1 2 3 4 5 6 7 8 9]
int32 (10,)
[[0 0][0 0]
[0 0]]
int32 (3, 2)
[[1. 1.][1. 1.]
[1. 1.]]
float64 (3, 2)
reshape()는 ndarray를 특정 차원 및 형태로 변환한다. 변환 형태를 함수 인자로 부여
reshape(-1,5)와 같이 인자에 -1을 부여하면 -1에 해당하는 axis의 크기는 가변적이되 -1이 아닌 인자값(여기서는 5)에 해당하는 axis 크기는 인자값으로 고정하여 ndarray의 shape를 변환한다.
reshape()는 reshape(-1,1), reshape(-1,)과 같은 형식으로 변환이 요구되는 경우가 많다. 주로 머신러닝 API의 인자로 1차원 ndarray를 명확하게 2차원 ndarray로 변환하여 입력하기를 원하거나, 또는 반대의 경우가 있을 경우 reshape()를 이용하여 ndarray의 형태를 변환시켜 주는데 사용된다.
array1 = np.arange(10)
print('array1:\n', array1)
# (2, 5) shape으로 변환
array2 = array1.reshape(2, 5)
print('array2:\n',array2)
#(5, 2) shape으로 변환.
array3 = array1.reshape(5,2)
print('array3:\n',array3)
array1:
[0 1 2 3 4 5 6 7 8 9]
array2:
[[0 1 2 3 4][5 6 7 8 9]]
array3:
[[0 1][2 3]
[4 5][6 7]
[8 9]]
array1 = np.arange(10)
print(array1)
array2 = array1.reshape(-1,5)
print('array2 shape:',array2.shape)
array3 = array1.reshape(5,-1)
print('array3 shape:',array3.shape)
[0 1 2 3 4 5 6 7 8 9]
array2 shape: (2, 5)
array3 shape: (5, 2)
array1 = np.arange(8)
array3d = array1.reshape((2,2,2))
print('array3d:\n',array3d.tolist())
# 3차원 ndarray를 2차원 ndarray로 변환하되 칼럼갯수는 1
array5 = array3d.reshape(-1, 1)
print('array5:\n',array5.tolist())
print('array5 shape:',array5.shape)
# 1차원 ndarray를 2차원 ndarray로 변환화되 칼럼 갯수는 1
array6 = array1.reshape(-1, 1)
print('array6:\n',array6.tolist())
print('array6 shape:',array6.shape)
array3d:
[[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
array5:
[[0], [1], [2], [3], [4], [5], [6], [7]]
array5 shape: (8, 1)
array6:
[[0], [1], [2], [3], [4], [5], [6], [7]]
array6 shape: (8, 1)
# 3차원 array를 1차원으로 변환
array1d = array3d.reshape(-1,)
print(array1d)
[0 1 2 3 4 5 6 7]
인덱싱 유형 | 설명 |
---|---|
특정 위치의 단일값 추출 | 원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터가 반환된다. |
슬라이싱(Slicing) | 슬라이싱은 연속된 인덱스상의 ndarray를 추출하는 방식이다.':' 기호 사이에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스에서 종료 인덱스-1 위치에 있는 ndarry를 반환한다. 예를 들어 1:5라고 하면 시작 인덱스 1과 종료 인덱스 4까지에 해당하는 ndarray를 반환한다. |
팬시 인덱싱(Fancy Indexing) | 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 ndarry를 반환한다. |
불린 인덱싱(Boolean Indexing) | 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 ndarry를 반환한다. |