본문 바로가기

카테고리 없음

배열의 기초

배열의 데이터 타입 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 ]]