1. 라이브러리 불러오기
- Numpy 배열을 사용하려면 우선 numpy 라이브러리를 불러와야 합니다.
- numpy 라이브러리는 일반적으로 np 별칭을 붙여 불러옵니다.
# 라이브러리 불러오기
import numpy as np
2. 배열 만들기
- 데이터 처리시 배열로 변환해 연산을 하거나, 결과가 배열로 표시되는 경우가 있음
2.1. 용어 정의
[용어]
- axis: 배열의 각 축
- rank: 축의 개수
- shape: 축의 길이, 배열의 크기
[3 x 4 배열의 경우]
- axis 0 과 axis 1 을 갖는 2차원 배열
- rank 2 array
- shape는 (3, 4)
2.2. 배열 만들기
- np.array() 함수를 사용해서 배열을 만듭니다.
- 대부분 리스트로부터 배열을 만들거나, 머신러닝 관련 함수 결괏값이 배열이 됩니다.
2.2.1. 배열 만들기
1) 1차원 배열 만들기
# 1차원 리스트
a1 = [1, 2, 3, 4, 5]
# 배열로 변환
b1 = np.array(a1)
# 확인
print(b1)
---
# 출력
# [1 2 3 4 5]
2) 2차원 배열 만들기
# 2차원 리스트(List of List)
a2 = [[1.5, 2.5, 3.2],
[4.2, 5.7, 6.4]]
# 배열로 변환
b2 = np.array(a2)
# 확인
print(b2)
---
# 출력
# [[1.5 2.5 3.2]
# [4.2 5.7 6.4]]
- 배열의 특징
- 배열은 한 번에 한 가지의 자료형만 가질 수 있다.
(위 배열에서 숫자 하나를 문자열로 바꾸면 다른 숫자도 모두 문자열로 바뀐다.) - 각 리스트의 자료 수가 다르면 배열이 생성되지 않는다. (배열은 무조건 요소 개수가 같아야 한다.)
- 배열은 한 번에 한 가지의 자료형만 가질 수 있다.
3) 3차원 배열 만들기
# 3차원 리스트
a3 = [[[1, 3, 1],
[4, 7, 6],
[8, 3, 4]],
[[6, 2, 4],
[8, 1, 5],
[3, 5, 9]]]
# 배열로 변환
b3 = np.array(a3)
# 확인
print(b3)
---
# 출력
# [[[1 3 1]
# [4 7 6]
# [8 3 4]]
#
# [[6 2 4]
# [8 1 5]
# [3 5 9]]]
2.2.2. 배열 정보 확인
1) 차원 확인
- ndim 속성으로 배열 차원 확인
# 차원 확인
print(b1.ndim)
print(b2.ndim)
print(b3.ndim)
---
# 출력
# 1
# 2
# 3
2) 형태(크기) 확인
- shape 속성으로 배열 형태를 확인합니다.
- 결과는 다음과 같은 형태의 튜플로 표시됩니다.
- 1차원: (x, )
- 2차원: (x, y)
- 3차원: (x, y, z)
- 앞에서 부터 axis 0, axis 1, axis 2의 크기를 의미합니다.
# 형태(크기) 확인
print(b1.shape)
print(b2.shape)
print(b3.shape)
---
# 출력
# (5,)
# (2, 3)
# (2, 3, 3)
3) 요소 자료형 확인
- dtype 속성으로 배열에 포함된 요소들의 자료형을 확인합니다.
- 배열은 한 가지 자료형만 가질 수 있다는 특징이 있습니다.
# 요소 자료형 형식 확인
print(b1.dtype)
print(b2.dtype)
print(b3.dtype)
---
# 출력
# int32
# float64
# int32
2.2.3. Reshape
- 배열에 포함된 요소가 사라지지 않는 형태라면 자유롭게 변환 가능
- (3, 2) → (2, 3) → (1, 6) → (6, 1) 등등 요소 개수만 변하지 않으면 됨
# (2, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 확인
print(a)
---
# 출력
# [[1 2 3]
# [4 5 6]]
1) (2, 3) → (3, 2)
# (3, 2) 형태의 2차원 배열로 Reshape
b = a.reshape(3, 2)
# 확인
print(b)
---
# 출력
# [[1 2]
# [3 4]
# [5 6]]
※ np.reshape() 함수 사용
# np.reshape() 함수 사용
b = np.reshape(a, (3, 2))
# 확인
print(b)
---
# 출력
# [[1 2]
# [3 4]
# [5 6]]
※ np.reshape() 함수는 다른 자료형도 변환 가능
# np.reshape() 함수는 다른 자료형도 변환시킨다.
# 리스트 선언
a1 = [1, 2, 3, 4, 5, 6]
# reshape
b1 = np.reshape(a1, (3, 2))
# 확인
print(b1)
---
# 출력
# [[1 2]
# [3 4]
# [5 6]]
2) (2, 3) → (6,)
# 1차원 배열로 Reshape
c = a.reshape(6,)
# 또는
# c = np.reshape(a, (6,))
# 확인
print(c)
---
# 출력
# [1 2 3 4 5 6]
3) -1의 편리성
- (m, -1) 또는 (-1, n) 처럼 사용해 행 또는 열 크기 한 쪽만 지정할 수 있음
# (2, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
[4, 5, 6]])
# reshape(m, -1) 형태로 지정하여 Reshape 가능
print(a.reshape(1, -1))
print()
print(a.reshape(2, -1))
print()
print(a.reshape(3, -1))
print()
print(a.reshape(6, -1))
---
# 출력
# [[1 2 3 4 5 6]]
#
# [[1 2 3]
# [4 5 6]]
#
# [[1 2]
# [3 4]
# [5 6]]
#
# [[1]
# [2]
# [3]
# [4]
# [5]
# [6]]
3. 배열 인덱싱과 슬라이싱
3.1. 인덱싱
- 1차원 배열은 리스트와 방법이 같음
- 배열[행, 열] 형태로 특정 위치의 요소 조회
- 배열[[행1,행2,..], :] 또는 배열[[행1,행2,..]] 형태로 특정 행 조회
- 배열[:, [열1,열2,...]] 형태로 특정 열 조회
- 배열[[행1,행2,...], [열1,열2,...]] 형태로 특정 행의 특정 열 조회
# (3, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 확인
print(a)
---
# 출력
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
1) 요소 조회
# 첫 번째 행, 두 번째 열 요소 조회
print(a[0, 1])
---
# 출력
# 2
2) 행 조회 (열 부분의 ':' 생략 가능)
# 첫 번째, 두 번째, 세 번째 행 조회
# print(a[[0, 1, 2], :]) # 행 조회 시 ':'은 생략 가능
print(a[[0, 1, 2]])
---
# 출력
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
3) 열 조회 (행 부분의 ':' 생략 불가능 → 생략하면 행 기준으로 조회가 됨)
# 첫 번째, 두 번째 열 조회
print(a[:, [0, 1]])
---
# 출력
# [[1 2]
# [4 5]
# [7 8]]
4) 행, 열 조회
# 첫 번째 행 첫 번째 열, 두 번째 행 두 번째 열, 세 번째 행 첫 번째 열의 요소 조회
print(a[[0, 1, 2], [0, 1, 0]])
---
# 출력
# [1 5 7]
3.2. 슬라이싱
- 배열[행1:행N,열1:열N] 형태로 지정해 그 위치의 요소 조회
- 조회 결과는 2차원 배열
- 마지막 범위 값은 대상에 포함되지 않음
- 즉, 배열[1:M, 2:N] 이라면 1 ~ M-1행, 2 ~ N-1열이 조회 대상
# (3, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 첫 번째 ~ 세 번째 행, 두 번째 ~ 세 번째 열 조회
print(a[0:3, 1:3])
# 두 번째 ~ 끝 행, 두 번째 ~ 끝 열 조회
print(a[1:, 1:])
---
# 출력
# [[2 3]
# [5 6]
# [8 9]]
#
# [[5 6]
# [8 9]]
3.3. 조건 조회
- 조건에 맞는 요소를 선택하는 방식, 불리안 방식이라고 부름
- 조회 결과는 1차원 배열
# 2차원 배열 만들기
score= np.array([[78, 91, 84, 89, 93, 65],
[82, 87, 96, 79, 91, 73]])
# 요소 중에서 90 이상인 것만 조회
print(score[score >= 90])
# 요소 중에서 90 이상인 것만 조회
c = score >= 90
print(score[c])
# 모든 요소 중에서 90 이상 95 미만인 것만 조회
print(score[(score >= 90) & (score < 95)])
---
# 출력
# [91 93 96 91]
# [91 93 96 91]
# [91 93 91]
4. 배열 연산
# 두 개의 (2, 2) 형태의 2차원 배열 만들기
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])
# 확인
print(x)
print(y)
---
# 출력
# [[1 2]
# [3 4]]
# [[5 6]
# [7 8]]
1) 배열 더하기
# 배열 더하기
print(x + y)
# 또는
print(np.add(x, y))
---
# 출력
# [[ 6 8]
# [10 12]]
# [[ 6 8]
# [10 12]]
2) 배열 빼기
# 배열 빼기
print(x - y)
# 또는
print(np.subtract(x, y))
---
# 출력
# [[-4 -4]
# [-4 -4]]
# [[-4 -4]
# [-4 -4]]
3) 배열 곱하기
# 배열 곱하기
print(x * y)
# 또는
print(np.multiply(x, y))
---
# 출력
# [[ 5 12]
# [21 32]]
# [[ 5 12]
# [21 32]]
4) 배열 나누기
# 배열 나누기
print(x / y)
# 또는
print(np.divide(x, y))
---
# 출력
# [[0.2 0.33333333]
# [0.42857143 0.5 ]]
# [[0.2 0.33333333]
# [0.42857143 0.5 ]]
5) 배열 제곱
# 배열 y 제곱
print(x ** y)
# 또는
print(np.power(x, y))
---
# 출력
# [[ 1 64]
# [ 2187 65536]]
# [[ 1 64]
# [ 2187 65536]]
6) 행렬의 곱
# 행렬의 곱
print(x.dot(y))
---
# 출력
# [[19 22]
# [43 50]]
'에이블스쿨 6기 DX 트랙 > 일일 복습' 카테고리의 다른 글
DAY 07. 데이터프레임 탐색 (0) | 2024.09.18 |
---|---|
DAY 07. 데이터프레임 생성 (3) | 2024.09.18 |
DAY 05. 함수 (1) | 2024.09.12 |
DAY 04. 제어문 (0) | 2024.09.11 |
DAY 03. 딕셔너리 자료형 (3) | 2024.09.06 |