-
Python Numpy (4. Numpy 배열 인덱싱)Python/Python 2020. 1. 20. 18:53반응형
import numpy as np
np.random.seed(0) #재현 가능성을 위한 시드 값 x1 = np.random.randint(10,size=6) # 1차원 배열 x2 = np.random.randint(10,size=(3,4)) # 3x4 2차원 배열 x3 = np.random.randint(10,size=(3,4,5)) # 3x4x5 3차원 배열
각 배열은 속성으로 ndim(차원의 개수) , shape(각 차원의 크기) , size ( 전체 배열 크기)를 가지고있다.
#각 배열은 속성으로 ndim(차원의 갯수 ) , shape(각 차원의 크기 ) , size(전체 배열의 크기) 를 가지고있다 print('x3 ndim: ' ,x3.ndim) print('x3 shape : ' ,x3.shape) print('x3 size : ', x3.size ) print('x3' , x3)
실행결과 .
#다른 유용한 속성으로 배열의 데이터 타입은 dtype이 있다 print('dtype: ', x3.dtype)
실행결과
print('itemsize: ',x3.itemsize , 'bytes') print('nbytes: ' , x3.nbytes , 'bytes ')
실행결과
배열 인덱싱: 단일 요소에 접근하기
파이썬의 표준 리스트 인덱싱과 매우 유사하다
#1차원 배열에서 i 번째(0부터 시작 ) 값에 접근하려면 파이썬 리스트에서와 마찬가지로 꺾쇠괄호 안에 원하는 인덱스를 지정하면된다. x1
실행결과
x1[0]
실행결과
#배열의 끝에서부터 인덱싱하려면 음수 인덱스를 사용하면된다 x1[-1]
실행결과
#다차원 배열에서는 콤마로 구분된 인덱스 튜플을 이용해 배열 항목에 접근할수있다. x2
실행결과
1차원 배열 인덱싱
#배열 슬라이싱: 하위 배열에 접근하기 # x[start:stop:step] #1차원 하위 배열 x= np.arange(10) x
실행결과
x[:5] #앞에서부터 5개를 가져옴
실행결과
x[5:] #인덱스 5 다음 요소들
x[4:7] #중간 4~7까지에 요소들을 출력
x[::2] #하나 걸러 하나씩의 요소로 구성된 배열
x[1::2] #인덱스 1에서 시작해 하나 걸러 하나씩 요소로 구성된 배열
x[::-1] # 모든 요소를 거꾸로 나열
x[5::-2] #인덱스 5부터 하나걸러 하나씩 요소를 거꾸로 나열
다차원 하위배열 인덱싱
#다차원 하위 배열 #다차원 슬라이싱도 콤마로 구분된 다중 슬라이스를 사용해 똑같은 방식으로 동작한다 . x2
x2[:2,:3] #두 개의 행, 세 개의 열
x2[:3, ::2] # 모든 행 , 한 열 걸러 하나씩
#하위 배열 차원도 함께 역으로 변환할 수 있다. x2[::-1 , ::-1]
#배열의 행과 열에 접근하기 한 가지 공통으로 필요한 루틴은 배열의 단일 행이나 열에 접근하는 것이다. #이것은 콜론으로 표시된 빈 슬라이스를 사용해 인덱싱과 슬라이싱을 결합함으로써 할 수 있다. print(x2[:,0]) #x2 의 첫번째 열 print('-------------') print(x2[0,:]) #x2의 첫번째 행
print(x2[0]) # x2[0,:] 와 동일
배열 슬라이스에 대해 알아야 할 중요한 사실 하나는 배열 슬라이스가 배열 데이터의 사본(copy)
가 아닌 뷰 (view) 를 반환한다는 점이다. 이는 NumPy 배열 슬라이싱 파이썬 리스트 슬라이싱과
다른 점 중 하나다. 리스트에서 슬라이스는 사본이다.# 배열 슬라이스가 배열 데이터의 사본(Copy) 이 아니라 뷰(View) 를 반환한다. print(x2)
x2_sub = x2[:2, :2] print(x2_sub)
x2_sub[0,0] = 99 print(x2_sub)
print(x2) # View 를 반환한다는것을 알 수 있다. #이 행위는 매우 유용하다. 큰 데이터세트를 다룰 때 기반 데이터 버퍼를 복사하지 않아도 #이 데이터의 일부에 접근하고 처리할 수 있다는 뜻이다.
# 배열의 사본 만들기 # 때로는 배열이나 하위 배열 내의 데이터를 명시적으로 복사하는 것이 더 유용할 때가 있다. #그 작업은 Copy 메서드로 가장 쉽게 할 수 있다. x2_sub_copy = x2[:2,:2].copy() print(x2_sub_copy)
x2_sub_copy[0,0] = 42 print(x2_sub_copy)
print(x2) # copy 한 하위 배열을 수정해도 원래 배열이 그대로 유지된다는것을 알 수 있다.
#배열 재구조화 #배열의 형상을 변경하는것이다. 이를 가장 유연하게 하는 방법은 reshape() 메서드를 사용하는것이다. grid = np.arange(1,10).reshape((3,3)) # grid라는 변수에 1~10 까지 3x3크기에 배열을 생성 print(grid)
반응형'Python > Python' 카테고리의 다른 글
Python NumPy(6. NumPy ufuncs연산) (0) 2020.01.21 Python Numpy ( 5. 배열 연결 및 분할) (0) 2020.01.20 Python Numpy (3.표준 데이터 타입) (0) 2020.01.20 Python Numpy 모듈 (2. Numpy배열 생성하기) (0) 2020.01.20 Python NumPy 모듈 (1. Numpy와 List의 차이 ) (0) 2020.01.20