달나라 노트

Python numpy : array indexing 본문

Python/Python numpy

Python numpy : array indexing

CosmosProject 2022. 3. 22. 18:37
728x90
반응형

 

 

 

1차원 array에서 특정 위치의 요소를 얻어내기 위한 indexing은 아래와 같습니다.

import numpy as np

arr_test = np.array([3, 1, 4, 5, 7, 2])
print(arr_test[0])
print(arr_test[1])
print(arr_test[2])
print(arr_test[3])


-- Result
3
1
4
5

python의 list에서 indexing을 하듯이 대괄호를 이용해서 indexing을 할 수 있습니다.

 

 

 

 

import numpy as np

arr_test = np.array([3, 1, 4, 5, 7, 2])
print(arr_test[1:3])
print(arr_test[0:3])
print(arr_test[1:4])
print(arr_test[0:6])


-- Result
[1 4]
[3 1 4]
[1 4 5]
[3 1 4 5 7 2]

콜론(:)을 이용하면 위처럼 array 속 일정 범위의 요소들만 추출할 수 있습니다.

[start_index:end_index]

위처럼 적으면 되며 start_index(포함) 부터 end_index(미포함) 까지의 범위에 있는 요소들을 return합니다.

 

 

 

 

import numpy as np

arr_test = np.array(
    [
        [9, 1, 5, 7],
        [2, 6, 5, 8],
        [0, 3, 0, 2],
        [4, 0, 7, 3]
    ]
)

print(arr_test)

print(arr_test[0])
print(arr_test[1])
print(arr_test[2])



-- Result
[[9 1 5 7]
 [2 6 5 8]
 [0 3 0 2]
 [4 0 7 3]]
 
[9 1 5 7]
[2 6 5 8]
[0 3 0 2]

다차원 array에서도 indexing을 이용하면 원하는 요소를 추출할 수 있습니다.

 

 

 

import numpy as np

arr_test = np.array(
    [
        [9, 1, 5, 7],
        [2, 6, 5, 8],
        [0, 3, 0, 2],
        [4, 0, 7, 3]
    ]
)

print(arr_test)

print(arr_test[0][1])
print(arr_test[1][1])
print(arr_test[2][1])
print(arr_test[3][1])
print(arr_test[3][2])


-- Result
[[9 1 5 7]
 [2 6 5 8]
 [0 3 0 2]
 [4 0 7 3]]
 
1
6
3
0
7

이 예시처럼 다중 indexing으로 원하는 요소 하나만을 추출할 수도 있습니다.

 

 

 

 

 

import numpy as np

arr_test = np.array(
    [
        [9, 1, 5, 7],
        [2, 6, 5, 8],
        [0, 3, 0, 2],
        [4, 0, 7, 3]
    ]
)

print(arr_test)

print(arr_test[0:2])
print(arr_test[1:3])


-- Result
[[9 1 5 7]
 [2 6 5 8]
 [0 3 0 2]
 [4 0 7 3]]
 
[[9 1 5 7]
 [2 6 5 8]]
 
[[2 6 5 8]
 [0 3 0 2]]

콜론(:)을 이용한 범위 indexing을 이용하면 마찬가지로 특정 범위에 위치한 내부 array를 추출할 수 있습니다.

 

이것을 좀 더 쉽게 이해해보면 다음과 같습니다.

(첫 번째 행 = 0행, 두 번째 행 = 1행, ... / 첫 번째 열 = 0열, 두 번째 열 = 1열, ... 처럼 표기하였습니다.)

 

arr_test[0:2] -> 원본 array의 0행부터 1행까지를 추출하라

arr_test[1:3] -> 원본 array의 1행부터 2행까지를 추출하라

 

 

 

import numpy as np

arr_test = np.array(
    [
        [9, 1, 5, 7],
        [2, 6, 5, 8],
        [0, 3, 0, 2],
        [4, 0, 7, 3]
    ]
)

print(arr_test)

print(arr_test[0:2, 0:2])
print(arr_test[1:3, 2:4])
print(arr_test[0:3, 3:4])


-- Result
[[9 1 5 7]
 [2 6 5 8]
 [0 3 0 2]
 [4 0 7 3]]
 
[[9 1]
 [2 6]]
 
[[5 8]
 [0 2]]
 
[[7]
 [8]
 [2]]

이를 좀 더 응용하면 위처럼 2차원 array에 대한 indexing에서 콤마를 이용해 범위 하나를 더 줄 수 있습니다.

 

각 코드의 의미는 다음과 같습니다. 아래에 적힌 의미를 보고 한번 원본 array와 추출된 array의 위치를 비교해봅시다.

(첫 번째 행 = 0행, 두 번째 행 = 1행, ... / 첫 번째 열 = 0열, 두 번째 열 = 1열, ... 처럼 표기하였습니다.)

 

arr_test[0:2, 0:2] -> 원본 array의 0행~1행, 0열~1열의 데이터를 추출하여 새로운 array로 만들어라.

arr_test[1:3, 2:4] -> 원본 array의 1행~2행, 2열~3열의 데이터를 추출하여 새로운 array로 만들어라.

arr_test[0:3, 3:4] -> 원본 array의 0행~2행, 3열의 데이터를 추출하여 새로운 array로 만들어라.

 

 

 

 

 

 

728x90
반응형
Comments