David의 개발 이야기!

Numpy 에 대해 알아보자 본문

인공지능공부

Numpy 에 대해 알아보자

david.kim2028 2023. 7. 5. 19:41
반응형

인공지능(데이터분석)을 공부할때, 반드시 사용하게 되는 라이브러리 4대장이 있다.

 

Numpy : 벡터, 행렬 연산 라이브러리

Pandas : 쉽게 말하면, 그냥 엑셀

OpenCV : 이미지 처리 라이브러리

Matplotlib : 시각화 도구(그래프 그려주는 )

 

이걸 하나하나 정리해보려고 한다!

사용법에 대한 간략한 정리니, 한번 훑어봐보자.


0. 벡터와 행렬

- 컴퓨터에서 벡터를 표현할때, 1차원 배열을 사용한다.

- 행렬(Matrix)란, N행, M열로 나열된 실수의 2차원 배열이다. 

 

=> 벡터와 행렬을 다루기 쉽게 도와주는 라이브러리가 Numpy 이다!!

 

1. 리스트와 numpy 는 서로 상호변환이 가능하다 - size, dtype

import numpy as np

array = np.array([1, 2, 3])

print(array.size) # 배열의 크기
print(array.dtype)# 배열 원소의 타입
print(array[2])   # 인덱스 2의 원소

3

int64

3

 

2. Numpy 배열 초기화하기 - arange / zeros / ones / random.randint

import numpy as np

# 0부터 3까지의 배열 만들기
array1 = np.arange(4)
print(array1)

# 0으로 초기화
array2 = np.zeros((4, 4), dtype=float)
print(array2)

# 1로 초기화
array3 = np.ones((3, 3), dtype=str)
print(array3)

# 0부터 9까지 랜덤하게 초기화된 배열 만들기
array4 = np.random.randint(0, 10, (3, 3))
print(array4)

# 평균이 0이고, 표준편차가 1인 표준 정규를 띄는 배열
array5 = np.random.normal(0, 1, (3, 3))
print(array5)
[0 1 2 3]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[['1' '1' '1']
 ['1' '1' '1']
 ['1' '1' '1']]
[[7 5 0]
 [3 8 0]
 [1 7 1]]
[[ 0.64728728 -0.61212745 -0.81683276]
 [ 1.6212868  -1.00531953 -1.63351014]
 [ 0.95283383  1.64552489  0.40630007]]

 

3. Numpy 배열 합치기 - concatenate 

import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
array3 = np.concatenate([array1, array2])

print(array3.shape)
print(array3)

(6,)

[1 2 3 4 5 6]

 

4. Numpy 세로 축으로 합치기 - concatenate(axis=0)

import numpy as np

array1 = np.arange(4).reshape(1, 4)
array2 = np.arange(8).reshape(2, 4)
array3 = np.concatenate([array1, array2], axis=0)

print(array3.shape)
print(array3)
(3, 4)
[[0 1 2 3]
 [0 1 2 3]
 [4 5 6 7]]

 

5. Numpy 배열 나누기

import numpy as np

array = np.arange(8).reshape(2, 4)

#만들어진 array를 index가 2열을 기준으로 나누어라
left, right = np.split(array, [2], axis=1)

print(left.shape)
print(right.shape)
print(right[1][1])

(2, 2)

(2, 2)

7

 

6. Numpy 상수 연산

import numpy as np

array = np.random.randint(1, 10, size=4).reshape(2, 2)
result_array = array * 10
print(result_array)

[[80 10]

[50 70]]

 

7. 서로 다른 형태의 Numpy 배열 연산 - reshape 

import numpy as np

array1 = np.arange(4).reshape(2, 2)
array2 = np.arange(2)
array3 = array1 + array2

print(array3)

[[0 2]

[2 4]]

 

import numpy as np

array1 = np.arange(0, 8).reshape(2, 4)
array2 = np.arange(0, 8).reshape(2, 4)
array3 = np.concatenate([array1, array2], axis=0)
array4 = np.arange(0, 4).reshape(4, 1)

print(array3 + array4)

[[ 0 1 2 3]

[ 5 6 7 8]

[ 2 3 4 5]

[ 7 8 9 10]]

 

8. Numpy 마스킹 연산 - reshape, 마스킹연산

import numpy as np

array1 = np.arange(16).reshape(4, 4)
print(array1)

array2 = array1 < 10
print(array2)

array1[array2] = 100
print(array1)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]
 [False False False False]]
[[100 100 100 100]
 [100 100 100 100]
 [100 100  10  11]
 [ 12  13  14  15]]

 

9. Numpy 집계 연산 - min, max, sum, mean

import numpy as np

array = np.arange(16).reshape(4, 4)

print("최대값:", np.max(array))
print("최소값:", np.min(array))
print("합계:", np.sum(array))
print("평균값:", np.mean(array))

최대값: 15

최소값: 0

합계: 120

평균값: 7.5

 

* 열마다 합을 구하고 싶다면? 

import numpy as np

array = np.arange(16).reshape(4, 4)

print(array)
print("합계:", np.sum(array, axis=0))

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]

[12 13 14 15]]

합계: [24 28 32 36]

 

10. Numpy 객체 저장 및 불러오기 - np.save

*단일 객체 저장 및 불러오기

import numpy as np

#단일 객체 저장 및 불러오기
array = np.arange(0, 10)
np.save('saved.npy', array)

result = np.load('saved.npy')
print(result)

[0 1 2 3 4 5 6 7 8 9]

 

*여러개의 Numpy객체를 하나의 파일에 저장 및 불러오기 

import numpy as np

# 복수 객체 저장 및 불러오기
array1 = np.arange(0, 10)
array2 = np.arange(10, 20)
np.save('saved.npz', array1=array1, array2=array2)

data = np.load('saved.npz')
result1 = data['array1']
result2 = data['array2']
print(result1)
print(result2)

[0 1 2 3 4 5 6 7 8 9]

[10 11 12 13 14 15 16 17 18 19]

 

11. Numpy 원소의 정렬 - sort, [::-1], sort(axis=0)

import numpy as np

# Numpy 원소 오름차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array)

# Numpy 원소 내림차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array[::-1])

# 각 열을 기준으로 정렬
array = np.array([[5, 9, 10, 3, 1], [8, 3, 4, 2, 5]])
array.sort(axis=0)
print(array)

[ 1 3 5 9 10]

[10 9 5 3 1]

[[ 5 3 4 2 1]

[ 8 9 10 3 5]]

 

12. 자주 사용하는 기타 함수 - np.linspace, np.random.seed, copy(), unique()

import numpy as np

# 균일한 간격으로 데이터 생성
array = np.linspace(0, 10, 5)
print(array)

# 난수의 재연(실행마다 결과 동일)
np.random.seed(7)
print(np.random.randint(0, 10, (2, 3)))

# Numpy 배열 객체 복사
array1 = np.arange(0, 10)
array2 = array1.copy()
print(array2)

# 중복된 원소 제거 
array = np.array([1, 1, 2, 3, 3, 3, 1])
print(np.unique(array))
[ 0.   2.5  5.   7.5 10. ]
[[4 9 6]
 [3 3 7]]
[0 1 2 3 4 5 6 7 8 9]
[1 2 3]

 

추가) Axis 개념

 

이걸 줄기삼아, 필요한 세세한 부분은 열심히 구글링 해보자!

반응형
Comments