PYTHON LIBRARY/NumPy Library

Python NumPy의 기본 함수와 메서드 : 배열 생성부터 형태 변환까지

신강희 2024. 4. 4. 18:10
728x90

<BUILT-IN METHODS AND FUNCTIONS>

<기본 배열 생성>

# zeros() 함수를 사용하여 0으로만 구성된 벡터 (Vector) 생성

np.zeros( 5 )

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

 

# 3행 4열짜리, 0으로 되어있는 행렬 (Matrix) 생성

np.zeros( (3,4) )

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

 

# ones() 함수를 사용하여 1로만 구성된 벡터 (Vector) 생성

np.ones( 7 )

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

 

# 4행 5열짜리, 1로 되어있는 행렬 (Matrix) 생성

np.ones((4,5))

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

<특정 값으로, 행렬 만들기>

np.full( (5,) , 10 )

array([10, 10, 10, 10, 10])

 

np.full( (3,4) , 10 )

array([[10, 10, 10, 10],
       [10, 10, 10, 10],
       [10, 10, 10, 10]])

<정수의 배열을 얻고자 할때>

# 0부터 9까지의 정수를 만드세요

range(10)

range(0, 10)

 

# range() 함수의 형태를 list로 확인하고자 할때

list( range(10) )

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

 

# 0부터 9까지를 포함한 array list 생성

np.arange(10)

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

 

# 5부터 시작하여 14까지 포함한 array list 생성

np.arange(5, 14+1)

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

 

# np.arange( start, stop, step) 까지 지정하여 활용 가능

np.arange(2 , 20+1, 2) => 2부터 시작하여 20까지 포함한 array list를 2칸씩 건너띄어서 생성

array([ 2,  4,  6,  8, 10, 12, 14, 16, 18, 20])

<정수 말고 실수를 얻고자 할때>

# np.linspace(start, stop, num) 사용

np.linspace(0, 25, ) => 시작숫자, 끝숫자, 개수(무한대이기 때문에 개수를 필히 설정해줘야함)

array([ 0.        ,  0.51020408,  1.02040816,  1.53061224,  2.04081633,
        2.55102041,  3.06122449,  3.57142857,  4.08163265,  4.59183673,
        5.10204082,  5.6122449 ,  6.12244898,  6.63265306,  7.14285714,
        7.65306122,  8.16326531,  8.67346939,  9.18367347,  9.69387755,
       10.20408163, 10.71428571, 11.2244898 , 11.73469388, 12.24489796,
       12.75510204, 13.26530612, 13.7755102 , 14.28571429, 14.79591837,
       15.30612245, 15.81632653, 16.32653061, 16.83673469, 17.34693878,
       17.85714286, 18.36734694, 18.87755102, 19.3877551 , 19.89795918,
       20.40816327, 20.91836735, 21.42857143, 21.93877551, 22.44897959,
       22.95918367, 23.46938776, 23.97959184, 24.48979592, 25.        ])

ㄴ 개수를 설정해 주지 않았기 때문에 해당 형태로 결과값이 출력됨

 

# 끝숫자를 포함하고 싶지 않을경우 개수 뒤에 endpoint= False 삽입 (기본적으로 빈칸으로 둘경우 endpoint= True로 인식하여 끝숫자를 포함시킴)

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

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

 

< 한번더 개념 정리 >

- 1차원 배열 = 벡터 (Vector)
- 2차원 배열 = 행렬 (Matrix)

<이렇게 1차원 배열을 얻은 후, 우리는 이것을 가지고 여러차원으로 만들 수 있다.>

# reshape 을 이용

# 1차원 배열 생성

x = np.arange(2, 10+1)

x

array([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

 

# 크기를 확인후 2차원 배열의 경우 행 x 열 의 형태이므로 size로 크기를 확인후 변환 한다.

x.size

9

 

# 2차원 배열 형태로 reshape

x.reshape( (3,3) )

array([[ 2,  3,  4],
       [ 5,  6,  7],
       [ 8,  9, 10]])

 

# 2차원 배열 형태를 1차원 배열로 다시 변환 할수도 있다

X = x.reshape(3,3)

X.reshape(9)

array([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

 

# 생성한 배열의 차원 수 확인

x.ndim => 상단에서 x 는 1차원 배열로 생성하였기 때문에 1

1

 

X.ndim => 상단에서 대문자 X 는 2차원 배열로 생성하였기 때문에 2

2

 

<여러단계를 거치지 말고, 한번에 원하는 다차원 배열로 만들 수 있다.>

 

# 5부터 시작해서 25개의 정수를 만들고, 이를 5x5 행렬로 만드세요

1) 단계별로 진행할 경우

z = np.arange(5, 5+25)

z

array([ 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])

 

z.size

25

 

z.reshape(5,5)

array([[ 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]])

 

2) 한꺼번에 만들어 보자

np.arange(5, 5+25).reshape(5,5)

array([[ 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]])

 

<랜덤값으로 채워진 배열을 만들 수 있다.>

 

# random 모듈 import 우선 필요

import random

 

# 0과 1 사이의 실수를 생성 할때

random.random()

0.6568451424974039

 

# 정수를 랜덤하게 출력하고 싶은 경우 .randint를 사용

random.randint(1, 6+1) => 1과 6사이에서 랜덤하게 정수를 출력한다.

1

 

# random 에서 무작위로 출력되는 값에 패턴을 정하고 싶을 경우 .seed 함수 사용

random.seed(10)

random.randint(1, 6+1)

5

ㄴ seed 를 사용하여 random 을 실행할경우 일정한 패턴으로 값이 출력된다.

 

# 1부터 6까지의 숫자를 랜덤으로 10개 필요하다.

np.random.randint(1, 6+1, 10)

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

 

# 임의의 실수값으로 1차원 배열 생성

np.random.random( 10 )

array([0.04842057, 0.35712271, 0.66569338, 0.01138961, 0.10791777,
       0.9010131 , 0.79487876, 0.81146098, 0.64027806, 0.62477951])

 

# 임의의 실수값으로 2차원 배열 생성

np.random.random( (2,3) )

array([[0.62266957, 0.35034518, 0.08245739],
       [0.19938447, 0.56933138, 0.92564234]])

 

< np.random.randint(start, stop, size = shape) 시작값과 끝값을 줄 수 있다 >

 

# 1과 6 사이의 정수로 2행 6열의 2차월 배열 생성

np.random.randint(1, 6+1, (2,6))

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

 

# 이렇게 범위를 설정하여 원하는 형태의 배열을 생성 할수 있다.

 

다음 게시글에서 계속

반응형