배열의 데이터 타입 dtype
파이썬 리스트와 달리 같은 데이터 타입만 저장 가능.
arr = np.array([0, 1, 2, 3, 4], dtype =float)
print(arr) # [0. 1. 2. 3. 4.]
print(arr.dtype) # 'float64'
print(arr.astype(int)) # 정수형 변환 [0 1 2 3 4]dtype 의 종류
| dtype | 설명 | 다양한 표현 |
|---|---|---|
| int | 정수형 타입 | i, int_, int32, int64, i8 |
| float | 실수형 타입 | f, float_, float32, float64, f8 |
| ol_ | 문자열 타입 | str, U, U32 |
| bool | 부울 타입 | ?, bool |
ndarray의 차원 관련 속성
- ndim : n+dimension 몇 차원인가?
- shape : 모양
list = [0, 1, 2, 3]
arr = np.array(list)
print(arr.ndim) # 1
print(arr.shape) # (4,)
list = [[0,1,2],[3,4,5]]
arr = np.array(list)
print(arr.ndim) # 2
print(arr.shape) # (2,3)
ndarray의 크기속성과 shape 조절
arr = np.array([0, 1, 2, 3, 4, 5])
print("arr.shape : {}".format(arr.shape)) # (6, )
print("배열 요소의 수 : {}".format(arr.size)) # 6
print(배열의 길이 : {}".format(len(arr))) # 6
arr.shape = 3, 2 # 모양을 변경
print("arr.shape : {}".format(arr.shape)) # (3, 2)
print("배열 요소의 수 : {}".format(arr.size)) # 6
print(배열의 길이 : {}".format(len(arr))) # 3
- size 는 요소의 수, length 는 행의 길이
Indexing
x = np.arange(7)
print(x) # [0 1 2 3 4 5 6]
print(x[3]) # 3
print(x[7])
# IndexError: index 7 is out fo bounds
x[0] = 10
print(x) # [10 1 2 3 4 5 6]
x = np.arange(1, 13, 1)
x.shape = 3, 4
print(x) # [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(x[2,3]) # 12
Slicing
인덱스의 값으로 배열의 일부분을 가져옴.
x = np.arange(7)
print(x) # [0 1 2 3 4 5 6 ]
print(x[1:4]) # [1 2 3]
print(x[1:) # [1 2 3 4 5 6]
print(x[:4]) # [0 1 2 3]
print(x[::2]) # [0 2 4 6] 2개의 간격을 띄어서 가져옴.
x = np.arange(1, 13, 1)
x.shape = 3, 4
print(x) # [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(x[1:2, :2:3]) # [[5]]
print(x[1:, :2]) # [[ 5 6]
[ 9 10]]
Boolean indexing
배열의 각 요소의 선택 여부를 Boolean mask를 이용하여 지정하는 방식.
특정 조건으로 True, False 로 구성하여 선택 여부를 결정하는 데 사용.
x = np.arange(7)
# Boolean mask? True, False로 구성된 mask array
print(x) # [0 1 2 3 4 5 6]
print(x < 3) # [True True True False False False False]
print(x > 7) # [False False False False False False False]
# Boolean mask의 True 요소에 해당하는 index만을 조회
print(x[x < 3]) # [0 1 2]
print(x[x % 2]) # [0 2 4 6]
Fancy indexing
배열의각 요소 선택을 Index 배열을 전달하여 지정하는 방식.
x = np.arange(7)
print(x) # [0 1 2 3 4 5 6]
print(x[[1, 3, 5]]) # 1, 3, 5번째 있는 값은? [1 3 5]
x = np.arange(1, 13, 1).reshape(3, 4)
print(x) # [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(x[[0, 2]]) # 0, 2번째 행의 값을 출력.
# [[ 1 2 3 4]
[ 9 10 11 12]]
#Indexing와 Slicing를 적절히 조합하여 사용 가능
print([1:2, 2]) # [7]
print(x[[0, 2], 2]) # [3, 11]
print(x[[0, 2], :2]) # [[ 1 2 ]
[ 9 10 ]]