반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SQL
- for반복문
- 선형회귀
- sql연습문제
- 코드잇TIL
- 다항회귀
- 로지스틱회귀
- matplotlib
- 코딩
- HTML
- 코딩독학
- 런던
- 판다스
- 행렬
- 경사하강법
- numpy
- 머신러닝
- 코드잇
- CSS
- 파이썬
- 유학생
- 코드잇 TIL
- 코딩공부
- 오늘도코드잇
- 데이터분석
- 영국석사
- Seaborn
- 윈도우함수
- 나혼자코딩
- 결정트리
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(파이썬) NumPy 슬라이싱 및 복사, 대각 요소 추출, 고유한 값 리턴하기 본문
728x90
반응형
이전 글에서 NumPy 의 개별 요소에 액세스하는 방법을 알아보았습니다. 이번 글에서는 ndarray의 일부분에 액세스하는 방법인 슬라이싱에 대해 알아보겠습니다.
🔻(참고)넘파이 인덱싱🔻
1. ndarray 슬라이싱
- ndarray의 일부분에 액세스하는 방법을 슬라이싱이라고 합니다.
- 대괄호[] 안에서 콜론 (:) 기호를 사용하여 인덱스들을 조합하여 슬라이싱을 할 수 있습니다.
- 일반적으로, 세 가지 유형의 슬라이싱이 있습니다.
- ndarray[start:end]
- ndarray[start:]
- ndarray[:end]
- 여기서, 마지막 인덱스는 제외된다는 점을 주의해야 합니다.
- 또한, ndarray는 다차원일 수 있기 때문에 슬라이싱을 할 때는 배열에 있는 각각의 차원에 대해 슬라이스를 지정해야 합니다.
1) 2차원 ndarray 슬라이싱하기
X = np.arange(20).reshape(4, 5)
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
Z = X[1:4, 2:5]
print('Z = \n', Z)
>>> Z = [[ 7 8 9]
[12 13 14]
[17 18 19]]
W = X[1:, 2:5]
print('W = \n', W)
>>> W = [[ 7 8 9]
[12 13 14]
[17 18 19]]
V = X[2, :]
print('V = \n', V)
>>> V = [10 11 12 13 14]
q = X[:, 2]
print('q = ', q)
>>> q = [ 2 7 12 17]
# We select all the elements in the 3rd column but return a rank 2 ndarray
R = X[:, 2:3]
print('R = \n', R)
>>> R = [[ 2]
[ 7]
[12]
[17]]
- X의 세번째 열에 있는 모든 요소를 선택하면, 위의 변수 q에서 알 수 있듯이 슬라이스는 2차원 배열이 아니라 1차원 배열을 리턴한다는 점을 주의해야 합니다.
- 하지만, 약간 다른 방식으로 X를 슬라이싱하면 변수 R에서 처럼 2차원의 배열을 얻을 수 있습니다.
2) 2차원 ndarray의 요소를 슬라이싱하고 편집하기
- 위에서 한 것 처럼 ndarray에 슬라이싱을 하고 그것들을 새로운 변수에 저장하면 데이터는 새 변수에 복사되지 않습니다.
- 예를 들어 Z = X[1:4, 2:5] 로 변수 Z를 할당할 때 원본 배열 X의 슬라이스는 변수 X에 복사되지 않습니다.
- 즉, X와 Z는 동일한 ndarray 를 가리키는 다름 이름들일 뿐입니다.
- 슬라이싱을 하면 원본 배열의 뷰가 생성될 뿐입니다. 즉, Z에서 변경을 하면 실제로 X안의 요소들도 변경됩니다.
X = np.arange(20).reshape(4, 5)
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
Z = X[1:4, 2:5]
print('Z = \n', Z)
>>> Z = [[ 7 8 9]
[12 13 14]
[17 18 19]]
Z[2, 2] = 555
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[ 10 11 12 13 14]
[ 15 16 17 18 555]]
- 위의 예시 처럼 Z를 변경하면 X도 변경됩니다.
2. numpy.ndarray.copy
ndarray.copy(order = 'C')
- 위의 구문을 쓰면 사본이 리턴됩니다.
- 하지만 슬라이스에 있는 값들의 사본이 포함된 새로운 ndarray를 만들려고 한다면 np.copy() 함수를 사용해야 합니다.
- np.copy(ndarray) 함수는 주어진 ndarray의 사본을 생성합니다.
- 또한, 이 함수를 메소드로써 사용할 수 있습니다.
X = np.arange(20).reshape(4, 5)
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
# create a copy of the slice using the np.copy() function
Z = np.copy(X[1:4, 2:5])
# create a copy of the slice using the copy as a method
W = X[1:4, 2:5].copy()
Z[2,2] = 555
W[2,2] = 444
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
print('Z = \n', Z)
>>> Z = [[ 7 8 9]
[ 12 13 14]
[ 17 18 555]]
print('W = \n', W)
>>> W = [[ 7 8 9]
[ 12 13 14]
[ 17 18 444]]
- 즉, copy 를 사용하면 서로 완전히 독립된 새로운 ndarray가 생성됩니다.
3. array를 인덱스로 활용하기
- ndarray 하나를 사용하여 슬라이스를 만들고 다른 ndarray에서 요소를 선택하거나 변경하면 유용한 경우가 많습니다.
1) 슬라이스 만들고 요소 선택, 변경하기
X = np.arange(20).reshape(4, 5)
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
indices = np.array([1, 3])
print('indices = ', indices)
>>> indices = [1 3]
# We use the indices ndarray to select the 2nd and 4th row of X
Y = X[indices, :]
print('Y = \n', Y)
>>> Y = [[ 5 6 7 8 9]
[15 16 17 18 19]]
# We use the indices ndarray to select the 2nd and 4th column of X
Z = X[:, indices]
print('Z = \n', Z)
>>> Z = [[ 1 3]
[ 6 8]
[11 13]
[16 18]]
2) 2차원에서 특정한 행 추출하기
import numpy as np
X = np.random.randint(1, 20, size=(50, 5))
print("Shape of X is: ", X.shape)
>>> Shape of X is: (50, 5)
# Create a rank 1 ndarray that contains a randomly chosen 10 values between `0` to `len(X)` (50)
# The row_indices would represent the indices of rows of X
row_indices = np.random.randint(0, 50, size=10)
print("Random 10 indices are: ", row_indices)
>>> Random 10 indices are: [ 1 38 31 45 44 21 6 24 19 33]
# Print those rows of X whose indices are represented by entire row_indices ndarray
X_subset = X[row_indices, :]
print(X_subset)
# Print those rows of X whose indices are present in row_indices[4:8]
X_subset = X[row_indices[4:8], :]
print(X_subset)
4. numpy.diag(대각 요소 추출하기)
numpy.diag(array, k=0)
- 이 구문을 쓰면 대각 요소들이 추출되거나 구성됩니다.
- NumPy는 ndarray에서 특정한 요소들을 선택하기 위한 내장 함수를 제공합니다.
- np.diag(ndarray, k=N) 함수는 N으로 정의되는 대각선을 따라 요소들을 추출합니다.
- 기본 값은 주 대각선을 나타내는 k=0 입니다.
- k>0 인 값을 쓰면 주 대각선 위의 대각선에 있는 요소들이 선택되고, k<0인 값을 쓰면 주 대각선 아래의 대각선에서 요소들이 추출됩니다.
X = np.arnage(25)reshape(5, 5)
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
print('z = ', np.diag(X))
>>> z = [ 0 6 12 18 24]
print('y = ', np.diag(X, k=1))
>>> y = [ 1 7 13 19]
print('w = ', np.diag(X, k=-1))
>>> w = [ 5 11 17 23]
5. numpy.unique
numpy.unique(array, return_index=False, return_inverse=False, return_counts=False, axis=None)
- 이 구문은 어떤 배열의 고유한 요소들을 정렬하여 리턴합니다.
- np.unique() 함수를 사용하여 고유한 요소들만 추출하면 유용한 경우들이 많이 있습니다.
X = np.array([[1,2,3],[5,2,8],[1,2,3]])
print('X = \n', X)
>>> X = [[1 2 3]
[5 2 8]
[1 2 3]]
print('The unique elements in X are: ', np.unique(X))
>>> The unique elements in X are: [1 2 3 5 8]
728x90
반응형
'코딩공부 > Python' 카테고리의 다른 글
(파이썬) 모듈과 스크립트의 차이점 총정리 (0) | 2024.06.16 |
---|---|
(파이썬) NumPy 부울 값 인덱싱, 집합 연산, np.sort() 정렬 (1) | 2024.06.14 |
(파이썬) NumPy, ndarray의 요소에 액세스하고 요소 삭제/삽입하기 (0) | 2024.06.12 |
(파이썬) NumPy 넘파이 내장 함수 총정리 (0) | 2024.06.12 |
(파이썬) 람다(lambda)함수 개념과 예시 및 map, filter 함수와 같이 응용하기 (0) | 2024.06.11 |