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 | 31 |
Tags
- GIT
- docker
- Docker Desktop
- Python
- AssertJ
- class
- 객체
- thread
- event
- Dict
- SSL
- synchronized
- 저장소
- 프로그래머스스쿨
- Java
- 자바
- 메소드
- JS
- SpringBoot
- Swing
- join()
- 파이썬
- 클래스
- 자바스크립트
- JavaScript
- array
- c#
- StringBuilder
- 스프링부트
- 배열
Archives
- Today
- Total
정리노트
[딥러닝] numpy 사용하기 본문
import numpy as np
a = np.array([1, 2, 3]) # 기본 배열 생성
b = np.array([[1, 2, 3], [4 ,5, 6], [7, 8, 9]]) # 2차원 배열 생성
c = np.zeros((3, 4)) # 해당 크기의 배열을 만들고 값은 모두 0
d = np.ones((3, 4), dtype = np.int64) # 해당 크기의 배열을 만들고 값은 정수 1로 채우기
e = np.eye(5) # 인덱스 0,0 / 1,1 / 2,2 .. 대각선 1로 채우기
a = np.array([[0, 1, 2], [3, 4 ,5], [6, 7, 8]])
a.shape # 배열의 형상 호출 --> (3, 3)
a.dtype # 배열 요소의 자료형 --> dtype('int64')
a.itemsize # 배열 요소 한 개의 크기 --> 8 (단위 byte)
a.size # 배열 요소의 개수 --> 9
- 균일한 간격으로 배열 생성하기
np.arange(0, 10, 2) # (s, e, step) s부터 e-1까지 step만큼 증가하며 만들기
'''array([0, 2, 4, 6, 8])'''
np.linspace(1, 10, 3) # (s, e, n) s부터 e까지 n개로 나누어서 만들기
'''array([ 1. , 5.5, 10. ])'''
arr = np.array([2, 3, 4, 5, 1])
arr.sort() # 정렬
arr
'''array([1, 2, 3, 4, 5])'''
- 배열 합치기
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])
z = np.array([[9, 10], [11, 12]])
np.concatenate((x, y, z), axis = 1) # 배열 합치기, axis = 1 : 1개의 배열로
'''array([[ 1, 2, 5, 6, 9, 10], [ 3, 4, 7, 8, 11, 12]])'''
np.vstack((x, y)) # 배열 행으로 쌓아서 합치기
'''
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])'''
np.hstack((x, y)) # 배열 열로 늘려서 합치기
'''array([[1, 2, 5, 6], [3, 4, 7, 8]])'''
- 배열의 형태 변경하기
a = np.arange(12) # 0부터 11까지 배열 만들기
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
a.shape # (12,)
a.reshape(3, 4) # 3행 4열로 형상변경
'''array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])'''
a.reshape(6, -1)
# (-1, 2): 행은 데이터 갯수에 맞추어 자동 조정, 열 2열
# (2, -1): 행 2개, 열은 데이터 갯수에 맞추어 자동 조정
'''array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])'''
array = np.arange(30).reshape(-1, 10) # 생성 -> 행/열 조정
array
'''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]])'''
- 배열을 여러 작은 배열로 분할하기
'''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]])'''
arr1, arr2 = np.split(array, [3], axis = 1)
# axis = 1 : 세로로 자르기 / axis = 0 : 가로로 자르기
arr1
'''array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22]])'''
arr2
'''array([[ 3, 4, 5, 6, 7, 8, 9],
[13, 14, 15, 16, 17, 18, 19],
[23, 24, 25, 26, 27, 28, 29]])'''
- 배열에 새로운 축 추가하기
a = np.array([1, 2, 3, 4, 5, 6])
a.shape # (6,)
a1 = a[np.newaxis, :] # 행에 축 추가
a1
'''array([[1, 2, 3, 4, 5, 6]])'''
# a1.shape --> (1, 6)
a2 = a[:, np.newaxis] # 열에 축 추가
a2
'''array([[1],
[2],
[3],
[4],
[5],
[6]])'''
# a2.shape --> (6, 1)
b = np.expand_dims(a, axis = 1) # 행에 a를 축으로 추가, 열은 1열
b
'''array([[1],
[2],
[3],
[4],
[5],
[6]])'''
- 인덱스와 슬라이싱
nums = np.array([22, 21, 34, 36, 44])
nums[1:3] # 인덱스 1부터 3-1 까지
nums[:2] # 0부터 2-1까지
y = nums > 30 # 배열에서 30보다 큰 수? 참 거짓
y
'''array([False, False, True, True, True])'''
nums [nums > 30] # 다른점 : y = [nums > 30] 는 참 거짓 표현됨
'''array([34, 36, 44])'''
nums [(nums > 30) & (nums < 38)] # 30보다 크고 38보다 작은 수
'''array([34, 36])'''
# 2차원도 크게 다르지 않다.
- 얕은 복사 / 깊은 복사
nums = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
nums2 = a[0, :]
nums2
'''array([1, 2, 3, 4])'''
num2[0] = 99 # nums의 값을 num2로 가져오고 num2의 값을 수정
num # num2에서 바꾸었지만 원본 nums의 값도 변경됨 --> 얕은 복사 (메모리적 효율로 인한 사용)
'''array([[99, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])'''
deepNums = nums.copy() # .copy() --> 깊은 복사
deepNums
'''array([[99, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])'''
deepNums[0] = 1
deepNums
'''array([[ 1, 1, 1, 1],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])'''
nums # copy()로 진행한 b2의 값을 변경해도 원본값 유지
'''array([[99, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])'''
- 기본 배열 연산
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[1, 1], [1, 1], [1, 1]])
result = arr1 + arr2 # 행, 열에 맞추어 연산
result
'''array([[2, 3],
[4, 5],
[6, 7]])'''
a = np.array([0, 1, 2, 3])
a**2 # 각 요소마다 제곱 진행
'''array([0, 1, 4, 9])'''
a < 2
'''array([ True, True, False, False])'''
# 간단한 배열 요소 계산 (numpy의 강점)
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a.sum() # 배열 전체 합 // 45
a.min() # 배열 전체 최솟값
a.max() # 배열 전체 최댓값
a.mean() # 배열 전체 평균
scores = np.array([[100, 90, 80], [80, 80, 80], [100, 70, 80]])
scores.mean(axis = 0) # 열 방향으로 평균
'''array([93.33333333, 80. , 80. ])'''
scores.mean(axis = 1) # 행 방향으로 평균
'''array([90. , 80. , 83.33333333])'''
- 브로드캐스팅
예시) 3개의 요소가 있는 배열에 *2 를 했을때 자동으로 3개의 요소에 맞추어 확장 후 곱하기 진행
arr = np.array([1, 2, 3]) # 각 열마다 *2
result = arr * 2
result
'''array([2, 4, 6])'''
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[2, 2], [2, 2], [2, 2]])
result = arr1 * arr2 # 각 행, 열에 맞추어 준다.
result
'''array([[ 2, 4], [ 6, 8], [10, 12]])'''
- 난수 배열 생성
np.random.seed(100)
np.random.rand(3) # 3개의 난수값을 가진 배열 생성
'''array([0.54369217, 0.20049061, 0.67016086, 0.55811222, 0.23237832])'''
np.random.rand(2, 3) # 2행 3열 형태의 난수값 배열 생성
'''array([[0.35974477, 0.1591823 , 0.43295804],
[0.27936218, 0.96103763, 0.09813216]])'''
10* np.random.rand(3) +10 # 10~20 사이의 난수값을 가진 배열 생성
'''array([14.06995552, 10.08376446, 15.6805893])'''
np.random.randint(1, 5, size = 5) # 1, 5-1 의 정수 5개를 가진 배열 생성
'''array([2, 4, 1, 4, 2])'''
np.random.randn(5) # 표준정규분포를 따르는 난수값 5개를 가진 배열 생성
'''array([-0.68437098, 0.25641114, -1.38950895, 2.07439733, 0.49033626])'''
np.random.randn(5, 4) # 표준정규분포를 따르는 난수값으로 5행 4열을 가진 배열 생성
'''array([[ 0.56119834, -0.9454057 , 1.0991844 , -0.27310347],
[-0.14407117, 1.5804042 , -2.14841076, 0.52957547],
[-0.48970206, 1.15681569, 1.66130224, 1.21409356],
[-0.41595992, 0.05126083, 0.06524321, 1.88598587],
[ 0.04630159, -0.1830548 , -1.23954822, -0.64197766]])'''
- 중복 제거
arr = np.array([1, 1, 2, 2, 2, 3, 3, 4])
np.unique(arr)
'''array([1, 2, 3, 4])'''
- 고유값
# 고유값 인덱스 호출
arr = np.array([1, 1, 2, 2, 2, 3, 3, 4])
arr = np.unique(arr, return_index = True)
arr
'''(array([1, 2, 3, 4]), array([0, 2, 5, 7]))'''
# 고유값 카운트
arr = np.array([1, 1, 2, 2, 2, 3, 3, 4])
arr = np.unique(arr, return_counts = True)
arr
'''(array([1, 2, 3, 4]), array([2, 3, 2, 1]))'''
- 전치 행렬 계산
arr = np.array([[1, 2], [3, 4], [5, 6]])
print(arr.T) # .T : 전치 행렬 계산
'''[[1 3 5]
[2 4 6]]'''
- 다차원 -> 1차원 배열 만들기
'''flatten() : 다차원 배열을 1차원으로 만들기 --> 메모리 복사 발생
reshape(-1) : 다차원 배열을 1차원으로 만들기 --> 메모리 복사 미발생
ravel() : 다차원 배열을 1차원으로 만들기 --> 메모리 복사 미발생
'''
a = np.array([[1, 2], [3, 4], [5, 6]])
flat_arr = a.flatten()
flat_arr[0] = 99
print(a)
print(flat_arr, "\n")
'''[[1 2]
[3 4]
[5 6]]
[99 2 3 4 5 6]'''
reshape_arr = a.reshape(-1)
reshape_arr[0] = 99
print(a)
print(reshape_arr, "\n")
'''[[99 2]
[ 3 4]
[ 5 6]]
[99 2 3 4 5 6]'''
ravel_arr = a.ravel()
ravel_arr[1] = 66
print(a)
print(ravel_arr)
'''[[99 66]
[ 3 4]
[ 5 6]]
[99 66 3 4 5 6]'''
728x90
'프로그래밍 > 머신러닝, 딥러닝' 카테고리의 다른 글
[딥러닝] 대표적으로 사용되는 라이브러리 목록 (4) | 2024.10.07 |
---|