Python

[파이썬] 넘파이: array, size, shape, dtype, save, load, zeros, ones, full, arange, linspace, reshape, ndim, argmax

eyoo 2022. 4. 27. 15:21

NUMPY BASICS

 

NumPy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리다.

 

먼저 넘파이 활용을 위해 numpy를 임포트하자.

또한 numpy를 as문을 이용하여 np로 축약해 편하게 사용하도록 해보자.

 

import numpy as np

# 이제 넘파이 함수를 np로 불러올수 있다.

 

 

리스트를 하나 만들어보자

 

a = [1,2,3,4,5]

 

그리고 이 리스트를 array함수를 사용해 1차원 배열로 만들수 있다.

 

in:

b = np.array(a)
b

out:

 

array([1, 2, 3, 4, 5])

 

 

넘파이는 리스트와 달리 mean 함수를 통해 바로 평균을 구할수 있다.

 

in:

b.mean()

out:

3.0

 

 

size 함수로 배열의 개수를 띄워보자

 

in:

b.size

out:

5

 

 

shape 함수로 배열의 모양을 확인할수 있다.

 

in:

b.shape

out:

(5,)

# 1차원 배열은 축이 하나(x , ), 2차원은 둘 (x , y), 3차원은 셋이다 (x , y , z ).

 

 

배열이 저장하고 있는 데이터의 타입을 확인하자

 

in:

b.dtype

out:

dtype('int32')

 

 

넘파이를 통해 2차원 배열을 만들어보자

 

먼저 두개의 리스트를 담은 리스트를 만들어보자

 

in:

C = [[1,2],[3,4]]
C

out:

[[1, 2], [3, 4]]
 
 
 
그 후, array 함수로 감싸면 2차원 배열인 행렬 혹은 매트릭스가 만들어진다.
 

in:

D = np.array(C)
D

out:

array([[1, 2],
       [3, 4]])

 

 

shape 함수로 형태를 확인해보자

 

in:

D.shape

out:

(2, 2)

# 축이 2개인 2차원 배열로 확인된다.

 

 

배열을 안전하게 save 하고 load 할수있다.

 

save함수로 파일명과 배열이름을 입력해 저장하자.

 

np.save('my_array',D)

 

load 함수로 파일명을 입력해 불러오자.

 

Y = np.load('my_array.npy')

 

 

zeros함수를 통해 0으로 이루어진 배열을 만들수있다.

 

in:

np.zeros((3,4))

out:

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

 

 

 

ones 함수를 이용하여 1로만 이루어진 배열을 만들수 있다.

 

in:

np.ones((3,5))

out:

array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

 

 

full 함수를 사용하여 원하는 숫자로만 이루어진 배열을 만들수 있다.

 

in:

np.full((2,3),6)

out:

array([[6, 6, 6],
       [6, 6, 6]])

 

 

arange함수로 정수의 배열을 만들어 보자 

 

in:

np.arange(4,13)

out:

array([ 4,  5,  6,  7,  8,  9, 10, 11, 12])

# np.arange(start,stop,step)

 

 

linspace를 통해 정수 말고 실수로 이루어진 배열을 만들자.

 

0부터 25까지 10개의 실수

 

in:

np.linspace(0,25,10, endpoint = False)

out:

array([ 0. ,  2.5,  5. ,  7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5])

# 마지막 수를 포함하지 않고 싶으면 endpoint = False를 추가해보자

 

 

reshape을 사용하여 배열 형태를 변경할수 있으며 다른 차원으로도 변경할수있다.

 

in:

X = np.arange(20).reshape(4,5)
X

out:

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

# 1차원 배열을 reshape함수를 이용하여 2차원으로 만들었다.

 

 

ndim 함수를 이용해 몇차원인지 간단히 확인할수있다.

 

in:

X.ndim

out:

2

 

 

random 함수를 이용해 랜덤값으로 채워진 배열을 만들어보자

 

in:

np.random.random((3,4))

out:

array([[0.14808446, 0.08956689, 0.30670853, 0.52472014],
       [0.27804222, 0.2747622 , 0.5298554 , 0.34083237],
       [0.87864027, 0.96870361, 0.75608205, 0.53223492]])

# random 함수를 이용하면 무작위 실수가 배치된다.

 

 

randint 함수를 이용해 시작과 끝을 주는 정수로 채워진 배열을 만들자.

 

in:

np.random.randint(1,6,(3,4))

out:

array([[3, 5, 3, 4],
       [1, 1, 5, 1],
       [3, 1, 1, 4]])

 

 

normal 함수로 정규분포를 만족하는 값으로 배열을 채울수 있다.

 

in:

np.random.normal(170,10,(2,3))

out:

array([[179.40418995, 170.33329547, 156.525817  ],
       [162.00098505, 175.5943731 , 184.05560531]])

# 평균값이 170, 표준편차가 10인 2행 3열 으로 된 배열을 만들었다.

 

넘파이 기본함수를 알아보자

  • 최대값 : 배열.max( )
  • 최소값 : 배열.min( )
  • 전체합 : 배열.sum( )
  • 전체평균: 배열.mean( )
  • 표준편차: 배열.std( )
  • 중앙값 : np.median(배열)

 

각 행별로 최대값을 구해보자.

 

 

in:

X.max(axis=1)

out:

array([91, 62, 62, 82])

# 각 열의 최대값은 axis = 0으로 입력하면된다.

 

 

배열속 최대값 데이터의 인덱스를 가져오려고 할때

 

in:

X.argmax()

out:

0

# 최소값은 argmin 함수를 사용하면 된다.

 

 

각 행별로 최소값의 인덱스 구하려면

 

in:

X.argmin(axis=1)

out:

array([3, 3, 0, 4], dtype=int64)

# axis가 1이면 행에서 0이면 열에서 구한다.