개발자에서 전직중🔥

[Python for Data Analysis] Numpy index&slicing Study 본문

💻 개발/👾 AI

[Python for Data Analysis] Numpy index&slicing Study

olivia_park 2020. 10. 20. 16:14

Numpy 색인과 슬라이싱 기초

1-1. 1차원 Numpy배열 생성

 

먼저 numpy import하기

import numpy as np
arr = np.arange(10)
arr
Out[4]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

 arr 이라는 이름의 Numpy배열을 생성한다.

 np.arange(n) -> 0부터 (n-1)까지의 값을 갖는 배열을 생성한다.

 arr을 in하여 잘 생성되었는지 확인.

 

1-2. 1차원 Numpy배열 슬라이싱

arr[5:8]
Out[6]: array([5, 6, 7])

arr[5:8] = 12
arr
Out[8]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

arr_slice = arr[5:8]
arr_slice
Out[10]: array([12, 12, 12])

arr[5:8] -> arr배열의 5번 인덱스 값~8번 인덱스 값까지 슬라이싱

arr[5:8] = 12 -> arr배열의 5번 인덱스 값~8번인덱스 값을 12로 바꿈

arr_slice = arr[5:8] -> arr배열의 5번 인덱스 값~8번인덱스 값까지 슬라이싱하여 arr_slice라는 또 다른 배열 생성

 

arr_slice[1] = 12345
arr
Out[12]: 
array([    0,     1,     2,     3,     4,    12, 12345,    12,     8,
           9])
           
arr_slice[:] = 64
arr
Out[14]: array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])

arr_slice[1] = 12345 -> arr_slice의 1번 인덱스 값을 12345 바꿈

arr_slice[:] = 64 -> arr_slice의 모든 값을 64로 바꿈

 

2-1. 2차원 Numpy배열 슬라이싱

arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr2d[2]
Out[16]: array([7, 8, 9])

 

arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]]) -> arr2d에 2차원 배열 생성

   - 1차원 배열과 다르게 스칼라값이 아닌, 배열을 요소로 함.

 

arr2d[2] -> arr2d의 2번째 인덱스 확인

out -> array([7,8,9]) 나오는것 확인.

 

2-2. 2차원 Numpy배열 인덱스

arr2d[0][2]
Out[17]: 3

arr2d[0,2]
Out[18]: 3

arr2d[0][2] & arr2d[0,2] -> 이 두 표현은 모두 arr2d의 0번 인덱스 배열의 2번 인덱스

                                    즉, arr2d의 (0,2)의 값을 찾는 것이다.

 

3-1. 3차원 Numpy배열 슬라이싱

arr3d = np.array([[[1,2,3],[4,5,6]], [[7,8,9],[10,11,12]]])

arr3d

Out[4]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],
       [[ 7,  8,  9],
        [10, 11, 12]]])

 3차원 Numpy 배열을 생성하여 arr3d에 넣기.

 

arr3d[0]

Out[5]: 
array([[1, 2, 3],
       [4, 5, 6]])

 arr3d[0] -> 3차원 배열의 0번째 인덱스를 확인해보면, 2x3크기의 배열이 있음을 확인가능.

 

old_values = arr3d[0].copy()
arr3d[0] = 42

arr3d
Out[8]: 
array([[[42, 42, 42],
        [42, 42, 42]],
       [[ 7,  8,  9],
        [10, 11, 12]]])
        
arr3d[0] = old_values

arr3d
Out[10]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],
       [[ 7,  8,  9],
        [10, 11, 12]]])

old_values 에 arr3d[0]을 복사해서 넣어두기.

arr3d[0] = 42 -> arr3d의 0번째 인덱스의 값을 모두 42로 바꿈.

arr3d[0] = old_values -> arr3d[0]번째 값을 미리 복사해둔 이전 값을 넣어 되돌리기.

 

3-2. 3차원 Numpy배열 인덱스

arr3d[1,0]
Out[11]: array([7, 8, 9])

arr3d[1,0] -> 2차원 배열에서와 마찬가지로 1번인덱스의 0번째 인덱스

                  즉, (1,0)의 값을 찾는 것.

 

x= arr3d[1]

x
Out[13]: 
array([[ 7,  8,  9],
       [10, 11, 12]])
       
x[0]
Out[14]: array([7, 8, 9])

복잡하지만 arr3d의 1번째 인덱스만 슬라이싱한 후, 1번째 인덱스에서 또 0번째 인덱스만 슬라이싱 하는 방법도 있다.

728x90
반응형