안녕하세요 콥스랩(COBS LAB)입니다. 오늘 소개해드릴 주제는 Numpy입니다. 저번시간에는 배열 데이터를 다룰 수 있는 파이썬 라이브러리인 넘파이(Numpy)의 개념과 기본 배열 생성에 대해 알아보았습니다. 이번 시간에는 배열 인덱싱 및 슬라이싱, 다양한 함수들에 대해서 알아보도록 하겠습니다.
목차
- 배열 인덱싱 및 슬라이싱
- 다양한 함수
배열 인덱싱
기본적인 인덱싱은 Python 리스트와 매우 유사합니다. 인덱싱은 0부터 시작합니다. data라는 array가 있을 때, data [1]와 같이 특정한 인덱스를 명시할 수도 있고, data [0:2]과 같이 범위 형태의 인덱스를 명시할 수도 있습니다.
data [:]의 경우, 해당 array의 전체 성분을 모두 선택한 결과에 해당합니다.
data = np.array( [1, 2, 3] )
data[0]
>>>
1
data[1]
>>>
2
data[3]
>>>
3
배열 슬라이싱
슬라이싱은 리스트의 인덱스 번호를 이용해서 일부분 또는 전체를 추출하는 것을 의미합니다. 슬라이싱을 통해 배열의 섹션 또는 특정 배열의 요소를 사용하여 상세한 분석 또는 추가 작업을 수행할 수 있습니다.
data = np.array( [1, 2, 3] )
data[0 : 2] # 인덱스 위치 0에서 인덱스 위치 2까지의 배열 섹션을 가져옵니다.
>>>
array( [1, 2] )
data[ : 3] # 인덱스 위치 0에서 인덱스 위치 3까지의 배열 섹션을 가져옵니다.
>>>
array( [1, 2, 3] )
data[1 : ] # 인덱스 위치 1에서 인덱스 위치 끝까지의 배열 섹션을 가져옵니다.
>>>
array( [2, 3] )
data[-2 : ] # 인덱스 위치 -2에서 인덱스 위치 끝(-1)까지의 배열 섹션을 가져옵니다.
>>>
array( [2, 3] )
array 관련 함수
1. append()
array.append(x) 형태로 사용합니다.
append는 덧붙인다는 뜻으로 괄호( ) 안에 값을 입력하면 새로운 요소를 array 맨 끝에 객체로 추가합니다. 요소를 추가할 때는 객체로 추가하게 되는데, 입력한 값이 리스트와 같은 반복 가능한 iterable 자료형이더라도 객체로 저장합니다.
nums = [1, 2, 3]
nums.append(4)
>>>
[1, 2, 3, 4]
nums.append([5, 6])
>>>
[1, 2, 3, 4, [5, 6]] # 리스트가 하나의 객체로 추가됩니다
append 함수를 사용해서 array의 맨 끝에 요소로 추가됩니다.
두 번째 예시처럼 [5, 6]이라는 리스트를 추가하여서 각 값이 5, 6의 요소로 추가되는 것이 아니라 [5, 6]이라는 리스트 형태가 그대로 요소로 추가된 것을 볼 수 있습니다.
2. extend( )
array.extend(iterable) 형태로 사용합니다. 입력한 iterable 자료형의 항목 각각을 array의 끝에 하나씩 추가합니다. append와 동일하게 요소를 array의 끝에 추가하지만 append와 다른 점은 괄호( ) 안에는 iterable 자료형만 올 수 있습니다. iterable 자료형이 아닌 경우 TypeError가 발생합니다.
nums = [1, 2, 3]
nums.extend([4, 5])
>>>
[1, 2, 3, 4, 5] #리스트로 주어진 [4, 5]의 요소가 각각 추가되었습니다.
a = [10]
nums.extend(a)
>>>
[1, 2, 3, 4, 5, 10]
괄호 안에 iterable 자료형만 입력할 수 있기 때문에 요소 하나를 추가하려면 리스트와 같은 iterable 자료형으로 변환하여 입력해야 합니다. 요소 하나만 추가한다면 굳이 extend 함수를 사용하기보다는 append 함수를 사용하는 것을 추천드립니다. 반면 append 함수는 iterable 자료형의 요소를 각각 추가하는 것이 불가능하니 그럴 때는 extend 함수를 사용할 수 있습니다.
3.insert( )
array.insert(i, x) 형태로 사용합니다. array의 원하는 위치 i 앞에 추가할 값 x를 삽입할 수 있습니다. i는 위치를 나타내는 인덱스를 숫자를 입력합니다. 추가할 값 x는 객체로 추가되며 iterable 자료형이더라도 객체로 저장됩니다.
nums = [1, 2, 3]
nums.insert(0, [10, 20]) # 0번째(맨앞에) 추가
>>>
[[10, 20], 1, 2, 3]
nums.insert(-1, 100) # 끝에서 1번째 전에 추가
print(nums)
>>>
[[10, 20], 1, 2, 100, 3] # 리스트 맨 끝에 저장되지 않음
4. pop( ), del
pop()과 del은 지우고자 하는 리스트의 인덱스를 받아서 지우는 방식입니다. 두 개의 차이는 pop()은 지워진 인덱스의 값을 반환하지만 del은 반환하지 않습니다. 이 차이 때문에 미세하게 del이 pop() 보다 수행속도가 더 빠릅니다. 또한 remove()와 동일하게 pop()과 del은 특정 인덱스를 삭제한 다음, 리스트를 재조정합니다.
a = [1,2,1,3,4,5,1]
removed = a.pop(1)
print(a)
print(removed)
print(a[0])
# [1, 1, 3, 4, 5, 1]
# 2
# 1
a = [1,2,1,3,4,5,1]
del a[1]
print(a)
print(a[0])
# [1, 1, 3, 4, 5, 1]
# 1
del은 pop()과 다르게 리스트의 범위를 지정해 삭제할 수 있습니다.
a = [1,2,1,3,4,5,1]
del a[:2]
print(a)
>>>
[1, 3, 4, 5, 1]
5.remove( )
remove()는 지우고자 하는 인덱스가 아닌, 값을 입력하는 방식입니다. 만약 지우고자 하는 값이 리스트 내에 2개 이상이 있다면 순서상 가장 앞에 있는 값을 지우게 됩니다. 해당 값을 삭제 후, 리스트를 재조정합니다.
a = [1, 2, 1, 3, 4, 5, 1]
a.remove(1)
print(a)
>>>
[2, 1, 3, 4, 5, 1]
print(a[0])
>>>
[2]
6.slice
remove()는 지우고자 하는 인덱스가 아닌, 값을 입력하는 방식입니다. 만약 지우고자 하는 값이 리스트 내에 2개 이상이 있다면 순서상 가장 앞에 있는 값을 지우게 됩니다. 해당 값을 삭제 후, 리스트를 재조정합니다.
a = [1, 2, 1, 3, 4, 5, 1]
b = a[1:]
print(b)
print(a)
>>>
[2, 1, 3, 4, 5, 1]
[1, 2, 1, 3, 4, 5, 1]
'Numpy' 카테고리의 다른 글
Numpy 기초 (3) - 배열 차원, 배열 shape, dtype (0) | 2023.01.13 |
---|---|
Numpy 기초 (1) - 배열 정의 및 생성, 배열 shape, 배열 연산 (0) | 2022.12.26 |
댓글