[현대사회의 데이터와 통계학] 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열을 추출하는 것이다.
'복수전공' 카테고리의 다른 글
[데이터 시각화] 1. 데이터 입출력 (0) | 2021.10.23 |
---|---|
[범주형 데이터분석] 1. 회귀 (0) | 2021.10.22 |
[현대사회의 데이터와 통계학] 2. NumPy : 배열의 연산 (0) | 2021.10.20 |
[표본조사론] 2. 단순임의추출법 (0) | 2021.10.20 |
[현대사회의 데이터와 통계학] 1. NumPy : 배열 생성하기 (0) | 2021.10.07 |
블로그의 정보
Hi Rev
Rev_