Python_Numpy(인덱싱,슬라이싱)

공우성·2021년 6월 7일

Python에서 numpy를 시작하기 앞서 numpy를 불러옵니다.

# 넘파이 불러오기
import numpy as np

1. array 인덱싱,슬라이싱

# 0~9까지 1차원 배열
arr = np.array([0,1,2,3,4,5,6,7,8,9])
arr
# 혹은
arr1 = np.arange(0,10)
arr1

출력 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 인덱싱
# 배열[인덱스 번호]
arr1[3]

출력 : 3

# 슬라이싱
# 배열[인덱스 번호 : 인덱스 번호 끝값]
arr1[1:5]

출력 : array([1, 2, 3, 4])

# 처음부터 끝까지 슬라이싱 해보기!
arr1[0:10]
# 혹은 arr1[:]

출력 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 인덱싱하고자 하는 값이 여러개일 때
# 1, 4, 7번째 접근하고 싶을때
arr1[[1,4,7]]

출력 : array([1, 4, 7])

# 배열 요소 값 변경 (수정)
arr1[3:9] = 7
arr1

출력 : array([0, 1, 2, 7, 7, 7, 7, 7, 7, 9])

2. 2차원 배열에서 인덱싱,슬라이싱

arr2 = np.arange(0, 50).reshape(5, 10)
arr2

출력 : array([[ 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, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

# 1행 인덱싱
arr2[1]

출력 : array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

# 넘파이 제공하는 행, 열 인덱싱 방법
# 배열[행, 열]
arr2[3,8]

출력 : 38

# 행은 모든 행이고, 열은 1번째 열에 접근
arr2[:,1]

출력 : array([ 1, 11, 21, 31, 41])

# 행은 2,4번째 행이고, 열은 모든 열에 접근
arr2[[2,4],:]

출력 : array([[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

# 2칸씩 출력
arr2[[2,4],:7:2]

출력 : array([[20, 22, 24, 26],
[40, 42, 44, 46]])

3. Boolean 인덱싱

# True, False 불리언 값을 이용하여 인덱싱하는 방법 접근하고자 하는 데이터의 정확한 위치를 파악하기 어려울때 많은 데이터에 접근할 때 조건식, 논리식을 이용하여 연산하게 만듦 -> True, False 배열[[True, False, ....]]

# Boolean 하기 전 예시 배열 생성
name_socre = np.random.randint(50,101, size = 8)
name_socre

출력 : array([ 62, 100, 66, 51, 94, 79, 73, 63])

name_socre >= 85

출력 : array([False, True, False, False, True, False, False, False])

# 논리식을 세워서 name_socre에 적용
# 85 이상인 점수 데이터에 접근 하고자 함
name_socre[name_socre >= 85]

출력 : array([98, 91])

4. 문제 실습(bmi 지수)

10명에 대한 키, 몸무게 데이터를 이용하여 bmi지수를 구하고 과제충 이상인 bmi값 확인 과체중 이상이 몇명인지 확인

height_weight.txt 파일 다운로드

# 1.데이터 불러오기
# np.loadtxt('파일경로 및 확장자', delimiter=',')
data = np.loadtxt('data/height_weight.txt', delimiter=',')
# 데이터 속성 확인
# 배열의 크기, 요소 개수, 데이터 타입 등
# f 문자열 포매팅
print(f'data의 크기 : {data.shape} ')
print('data의 크기 : {}'.format(data.shape))
print('data의 요소 개수 : ',data.size)
print('data의 타입 : ',data.dtype)

출력 : data의 크기 : (2, 10)
data의 크기 : (2, 10)
data의 요소 개수 : 20
data의 타입 : float64

# 0번째 행에 있는 데이터는 뭘 의미하나요? 키 cm
data[0]

출력 : array([175.2, 180.3, 175. , 169.2, 185.2, 188. , 177.6, 178.2, 177. , 179. ])

data[0,:]

출력 : array([175.2, 180.3, 175. , 169.2, 185.2, 188. , 177.6, 178.2, 177. , 179. ])

# 1번째 행이 의미하는건 뭘까요? 몸무게 kg
data[1]

출력 : array([65.6, 88. , 79.2, 69.3, 55. , 71.2, 73. , 68.9, 74. , 82. ])


1. 키(0행)와 몸무게(1행)를 각각 다른 변수에 저장
2. 키 단위 변경 1m = 100cm
3. bmi식에 적용해서 bmi값을 구함
4. bmi값을 담은 배열을 과체중 이상인지 판별하는 논리식 적용

# 1. 키(0행)와 몸무게(1행)를 각각 다른 변수에 저장
# 2. 키 단위 변경 1m = 100cm
data_height = data[0] * 0.01
data_weight = data[1]
# 3. bmi식에 적용해서 bmi값을 구함
data_bmi = data_weight / (data_height * data_height)
data_bmi

출력 : array([21.37153104, 27.07018468, 25.86122449, 24.20652885, 16.03543423,
20.14486193, 23.14392095, 21.69720651, 23.62028791, 25.59220998])

data_over = data_bmi[data_bmi >= 23]
data_over

출력 : array([27.07018468, 25.86122449, 24.20652885, 23.14392095, 23.62028791, 25.59220998])

# 4. bmi값을 담은 배열을 과체중 이상인지 판별하는 논리식 적용
# size , shape , len() 이런것들로 데이터의 개수 확인 가능 

print(data_over.size)
print(data_over.shape)
print(len(data_over))

출력 :
6
(6,)
6

5. 배열 관련 함수

# 아까 만들어둔 배열 출력
arr1

출력 : array([0, 1, 2, 7, 7, 7, 7, 7, 7, 9])

# sum 함수 - 총 합 구하는 기능
np.sum(arr1) 

출력 : 54

# mean함수 평균값을 구해주는 기능
# arr2 평균
np.mean(arr2)

출력 : 24.5

# sqrt함수 - 제곱근을 구해주는 기능
np.sqrt(arr1)

출력 : array([0. , 1. , 1.41421356, 2.64575131, 2.64575131,
2.64575131, 2.64575131, 2.64575131, 2.64575131, 3. ])

# abs함수 - 절대값을 구해주는 기능
arr = np.array([-1, 0, 1, -2, -3])
arr

출력 : array([-1, 0, 1, -2, -3])

profile
늦더라도 하나씩 해보자.

0개의 댓글