코딩(coding)/파이썬 기초 개념

[3] 매트릭스 인덱싱(Indexing)/슬라이싱(Slicing) - numpy 넘파이 array 활용 (Danuri coding/다누리 코딩)

다누리_Danuri JUN 2022. 8. 2. 13:32

매트릭스(Matrix)를 생성하고 원하는 형태로 만드는 것까지 알아보았다면,

 

+ 이전 매트릭스 관련 내용은 다음을 참고해주세요 :)

https://danuri.tistory.com/6

 

이번에는 원하는 데이터만 찾고, 추출하는 작업을 해보겠습니다.

이 작업이 바로 인덱싱(Indexing)과 슬라이싱(Slicing)입니다.

 

인덱싱과 슬라이싱 작업은 데이터를 전처리하고 원하는 값들을 불러오는 작업에 많이 쓰이게 됩니다. 

이를 활용하여 자신이 원하는 데이터를 가져올 수 있도록 해봅시다.

 

1. 인덱싱 (Indexing)

matrix = np.array([[1, 2, 3], [4, 5, 6]], int) #매트릭스를 먼저 만들어 줍니다.
print(matrix)
"""
[[1 2 3]
 [4 5 6]]
"""

#1. 인덱싱 - 해당 위치에 있는 값을 가져오기
print(matrix[1,1]) #이게 만약 [0,0] 이면 1이 나오게 됩니다 :)
### 5

print(matrix[1][1])
### 5

매트릭스의 인덱싱은 이차원 배열이기 때문에 [0,0] 형식으로 표기할 수 있습니다.

따라서 np.array()로 지정한 매트릭스에서 - [0,0] 혹은 [0][0] 방식으로 표기하게 되면 해당 위치에 있는 값을 볼 수 있습니다.

 

이를 좀 더 활용한다면,

해당 위치에 있는 값을 바꿀 수도 있습니다.

#1.1. 인덱싱 활용 - 해당 위치에 있는 값을 바꿀 수 있습니다.
matrix[1][1] = 1
matrix 
"""
array([[1, 2, 3],
       [4, 1, 6]])
"""

다음과 같이 [1,1] 자리에 있는 값을 1로 바꾸었습니다. 

기존 5였던 값이 -> 1로 변한 것을 확인할 수 있습니다.

 

2. 슬라이싱 (Slicing)

 

슬라이싱은 특정 행, 열에 있는 값을 가져오는 것을 말합니다.

 

코드로 살펴보게 되면,

#1. 행과 열을 입력하여 slicing 을 합니다.

matrix = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)

matrix[:, 2:] #전체 row의 2열 이상부터 가져온다. 여기서는 첫번째가 row, 두번째가 column 이라고 보면 된다.
"""
array([[ 3,  4,  5],
       [ 8,  9, 10]])
"""

다음과 같이 [row, column] 자리에 범위를 지정해주면 해당 범위에 있는 값들을 가져오게 됩니다.

위에 예시를 보면, 앞에 row는 전체를 가져오고, column 은 2번째 이상부터 가져오는 것을 볼 수 있습니다.

 

이를 좀 더  활용해본다면,

row 나 column 만 지정해준 경우를 생각해볼 수 있습니다.

#1.1. row 나 column 만 지정하여 슬라이싱

matrix[0:1] #이렇게 row만 지정해줄 경우, 0번째 row의 전체를 가져온다.
### array([[1, 2, 3, 4, 5]])

 

그리고 매트릭스 크기가 크거나, 특정 단위로 슬라이싱을 해야 하는 경우가 있을 수 있습니다.

이때는, 

#1.2. start, end, step 으로 슬라이싱

matrix[:,::2] # 이렇게 하면 row는 다 가져오고, column 부분에서 start, end, step 으로 설정되어 2칸 간격으로 가져온다.
"""
array([[ 1,  3,  5],
       [ 6,  8, 10]])
"""

이렇게 start, end, step을 설정하여 원하는 값을 가져올 수 있습니다.

여기서 살펴보아야 할 점은, 앞에서 슬라이싱 하는 방법에서 활용한 형태라는 것입니다.

 

따라서,

앞에 row는 전체를 가져오고, 뒤에는 column이라고 볼 수 있습니다.

: : : 이런 식으로 표현이 되어 있는데, 순서대로 start, end, step입니다.

1:3:1이라고 설정할 경우 1부터 시작해서 2(3-1)까지 1칸 간격으로 슬라이싱을 해달라는 표현입니다.

matrix[:,1:3:1]
"""
array([[2, 3],
       [7, 8]])
"""

따라서 다음과 같은 값을 얻을 수 있습니다.

 

인덱싱(Indexing)과 슬라이싱(Slicing) 부분은 활용도가 높으니 꼭 알아가셨으면 좋겠습니다 :)