Rev Notebook

[현대사회의 데이터와 통계학] 3. Numpy : 배열의 인덱싱과 슬라이싱

by Rev_

* 인덱싱(indexing) : 위치나 조건을 지정하여 배열의 원소 선택

* 슬라이싱(slicing) : 범위를 지정하여 배열의 일부분을 선택

 

1차원 배열의 인덱싱

a1 = np.array([0, 10, 20, 30, 40, 50])
a[4]

실행 결과 : 40

위와 같이 간단하게 인덱싱할 수 있다.

a1[5] = 70
a1

실행 결과 : array([0, 10, 20, 30, 40, 70])

원소값을 바꾸는것도 가능하다.

a1[[1, 3, 4]]

실행 결과 : array([10, 30, 40])

배열의 여러원소를 선택하려면 위와 같이 하면 된다.

 

  • 1차원 배열을 2차원 배열로 만들기
a1 = np.array([0, 10, 20, 30, 40, 50])
aa1 = a1.reshape(3, 2)
aa1

실행 결과 : array([[ 0, 10],

                       [20, 30],

                       [40, 50]])

3X2인 2차원 배열이 되었다.

 

2차원 배열의 인덱싱

a2 = np.arange(10, 100, 10).reshape(3, 3)
a2[0]

실행 결과 : array([10, 20, 30])

 

a2[(0, 2)]

실행 결과 : 30

a2[[0, 2]]

실행 결과 : array([[10, 20, 30],

                       [70, 80, 90]])

위 2개의 코드의 차이에 주의해야한다. 얼핏보면 비슷한 코드지만 실행 결과는 전혀 다르다.

a2[(0, 2)]는 첫번째 행에서 인덱스 2에 해당하는 원소를 추출하라는 의미이지만 a2[[0, 2]]는 0번째 행과 2번째 행을 추출하라는 의미이다.

 

a2[:, 0]

실행 결과 : array([10, 40, 70])

위와 같이 하면 0번째 열을 추출할 수 있다.

a2[1] = np.array([45, 55, 65])

원소 하나뿐만 아니라 하나의 행 전체도 값을 변경할 수 있다.

 

1차원 배열 슬라이싱

b1 = np.array([0, 10, 20, 30, 40, 50])
b1[1 : 4]

실행 결과 : array([10, 20, 30])

슬라이싱 범위는 '시작'부터 '끝-1'만큼이다.

 

b1[:3] # 처음부터 인덱스 2까지
b1[2:] # 인덱스 2부터 끝까지
b1[-1:] # 마지막 원소
b1[::-1] # 처음부터 끝까지 역순정렬
b1[4::-2] # 인덱스 4부터 -2씩 역순정렬

 

b1[2 : 5] = [25, 35, 45]
b1

실행 결과 : array([ 0, 10, 25, 35, 45, 50])

배열의 일부분도 변경할 수 있다.

 

2차원 배열 슬라이싱

b2 = np.arange(10, 100, 10).reshape(3, 3)
b2[1 : 3, 1 : 3]

실행 결과 : array([[50, 60],

                       [80, 90]])

좀 헷갈릴 수 있는데, 2차원 배열의 1행과 2행에서 1열과 2열을 추출하는 것이다. 

블로그의 정보

Hi Rev

Rev_

활동하기