본문 바로가기
공부한 것들../Numpy

Numpy 데이터 조회를 위한 인덱싱 및 슬라이싱

by bottle-an00 2024. 9. 12.

#인덱싱 & 슬라이싱..?

배열에 존재하는 특정 데이터는 인덱스를 통해 접근할 수 있다. 인덱싱을 통해 배열에 존재하는 데이터를 조회하는 것은 "배열명"[인덱스] 형태로 접근할 수 있다. 

 

슬라이싱은 범위를 지정하여 데이터를 조회하는 방식이다.

"배열명"[from index : to index]

 

from index : 슬라이싱이 시작되는 인덱스 위치이다. 생략 가능하여 default값은 0이다.

to index : 슬라이싱이 종료되는 인덱스 위치이다. to index -1 위치의 데이터까지 조회되며 생략 가능하다. 

default는 항상 해당 배열의 마지막 인덱스이다. 

 

# 예시 코드

# 인덱싱, 슬라이싱 예시

import numpy as np

arr_1d = np.arange(5,15)
print("1D-array ::")
print(arr_1d)
print("arr_1d[3] = ",arr_1d[3])

arr_1d[3] = 78
print("changed 1D-array :: ",arr_1d )

#2d array indexing
arr_2d = np.arange(16).reshape(4,4)
print("\n2d-Array Indexing :: ") 
print(arr_2d)
print("\narr_2d[2,3] = ", arr_2d[2,3])

arr_2d[2,3] = 0
print("changed 2D-array :: ",arr_2d )

#2d arrray slicing
print("\nSlicing :: ")
print(arr_2d[1:3,1:3])


arr_3d = np.arange(16).reshape(4,2,2)
print("\n3d-Array Indexing :: ") 
print(arr_3d)
print("\narr_3d[2,1,1] = ", arr_3d[2,1,1])

arr_3d[2,1,1] = 0
print("changed 3D-array :: ",arr_3d )

#3d arrray slicing
print("\nSlicing :: ")
print(arr_3d[1:3,:,:])
1D-array ::
[ 5  6  7  8  9 10 11 12 13 14]
arr_1d[3] =  8
changed 1D-array ::  [ 5  6  7 78  9 10 11 12 13 14]

2d-Array Indexing :: 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

arr_2d[2,3] =  11
changed 2D-array ::  [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10  0]
 [12 13 14 15]]

Slicing :: 
[[ 5  6]
 [ 9 10]]

3d-Array Indexing :: 
[[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]]

 [[12 13]
  [14 15]]]

arr_3d[2,1,1] =  11
changed 3D-array ::  [[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10  0]]

 [[12 13]
  [14 15]]]

Slicing :: 
[[[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10  0]]]

# Negative Index 활용

import numpy as np

#2d array indexing
arr_2d = np.arange(16).reshape(4,4)
print("\n2d-Array Indexing :: ") 
print(arr_2d)

#Slicing by using Negative Index
print("\nSlicing by Negative Index ex1 :: ")
print(arr_2d[:,1:-1])

print("\nSlicing by Negative Index ex2 :: ")
print(arr_2d[-3:-1,1:-1])

print("\nSlicing by Negative Index ex3 :: ")
print(arr_2d[-1:-3,1:-1])
2d-Array Indexing :: 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

Slicing by Negative Index ex1 :: 
[[ 1  2]
 [ 5  6]
 [ 9 10]
 [13 14]]

Slicing by Negative Index ex2 :: 
[[ 5  6]
 [ 9 10]]

#결과를 보면 아무 요소도 존재하지 않는 것을 볼 수 있다. 그 이유는 python의 slicing 에서는 
#from index값이 to index보다 작아야한다.(순서상..)
#따라서, ex3의 경우 invalid하기에 empty array가 출력되는 것이다.
Slicing by Negative Index ex3 :: 
[]

'공부한 것들.. > Numpy' 카테고리의 다른 글

Numpy 데이터 정렬  (0) 2024.09.12
Numpy 집계 함수  (0) 2024.09.12
Numpy 기본 연산  (0) 2024.09.12
Numpy ndarray shape 변경  (0) 2024.09.12
Numpy :: 데이터 타입  (0) 2024.09.12