본문 바로가기
IT/파이썬(Python)

파이썬 numpy 배열 만들기 (2) empty, arange, random 함수

by 깡타의 컴맹인생 2023. 3. 29.
반응형

파이썬 배열 만들기

이전 시간에도 numpy 라이브러리를 통해 배열을 생성하는 방법에 대해 알아봤다. 이번 시간에도 numpy 배열을 만드는 방법에 대해 알아보려고 한다. 이전 글을 읽고 싶다면 아래 링크를 클릭하도록 하자.

https://ggangtalife.tistory.com/104

 

파이썬 numpy 배열 만들기 (1) array, zeros, ones 함수

파이썬에는 다양한 형태의 데이터 구조가 존재한다. 리스트, 딕셔너리, 데이터 프레임 등이 있는데 오늘은 numpy 배열에 대해 알아보려고 한다. 목차 1. Numpy란? 2. 배열 만들기 3. 0이 들어있는 배열

ggangtalife.tistory.com

목차
1. 초기화가 없는 배열 만들기
2. range 형태 배열 만들기
3. 난수 배열 만들기

1. 초기화가 없는 배열 만들기

np.empty((행, 열))

np.empty(단일 행 구조 데이터 개수)
1
2
3
4
5
6
7
import numpy as np
 
= np.empty(10# 1행 10열의 empty 배열 생성
print('a \n', a, '\n')
 
= np.empty((5,5)) # 5행 5열의 empty 배열 생성
print('b \n', b, '\n', b.dtype)
cs
a 
 [1.44847826e-311 1.44847826e-311 1.44847826e-311 1.44847826e-311
 1.44847826e-311 1.44847826e-311 1.44847826e-311 1.44847826e-311
 1.44847826e-311 1.44847826e-311] 

b 
 [[1.44926341e-311 7.70742408e-322 0.00000000e+000 0.00000000e+000
  1.89146896e-307]
 [1.15998412e-028 4.31603868e-080 1.94919985e-153 1.35717430e+131
  7.06652016e-096]
 [7.06652016e-096 1.81148490e-152 9.37041222e-076 6.98345624e-077
  6.98345624e-077]
 [6.01391519e-154 7.06673073e-096 7.06652016e-096 7.18988929e+140
  4.99874708e+217]
 [4.47303447e-143 1.46899974e+179 9.08367237e+223 1.16466228e-028
  1.03778830e-314]] 
 float64

empty 함수는 초기화가 없는 배열을 생성해 준다. zeros와 ones 함수는 메모리를 할당받은 뒤에 각각 0과 1로 초기화한 뒤에 출력한다. 하지만 empty 함수로 생성된 배열은 초기화가 안된 상태다. 해당 메모리 영역에 어떤 데이터가 남아있었던지 상관없이 영역의 주소만 알려준다. 각 위치에 어떤 데이터를 넣을지는 사용자의 몫이다. 초기화를 생략해서 코드를 실행했을 때의 시간이 단축되지만 거의 사용되지 않는다.


2. range 형태의 배열 만들기

< 종료 구간 지정, 1 간격의 배열 >
np.arange(마지막 값)
마지막 값은 포함 안됨

< 원하는 시작, 종료 구간 지정, 1 간격의 배열 >
np.arange(시작 값, 마지막 값)
마지막 값은 포함 안됨

< 원하는 시작, 종료 구간 지정, 간격의 배열 >
np.arange(시작 값, 마지막 값, 원하는 간격)
마지막 값은 포함 안됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
 
= np.arange(1102# 1 이상 10 미만 2 간격의 배열 생성
print('a')
print(a, '\n')
 
= np.arange(110# 1 이상 10 미만 1 간격의 배열 생성
print('b')
print(b, '\n')
 
= np.arange(10# 0 이상 10 미만 1 간격의 배열 생성
print('c')
print(c, '\n')
 
print(c.dtype)
cs
a
[1 3 5 7 9] 

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

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

int32

arange 함수는 range 함수 사용법과 똑같다. 데이터 타입은 int32로 출력된다.


3. 난수 배열 만들기

< 0, 1 사이의 표준정규분포 난수 >
np.random.random((행, 열))
np.random.random(단일 행 구조 데이터 개수)

< 평균과 표준편차 난수 생성 >
np.random.normal(평균, 표준편차, (행, 열))
np.random.normal(평균, 표준편차, 단일 행 구조 데이터 개수)

< 정수 난수 생성 >
np.random.randint(시작 값, 마지막 값, (행, 열))
np.random.randint(시작 값, 마지막 값, 단일 행 구조 데이터 개수)
마지막 값은 포함 안됨
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
import numpy as np
 
a1 = np.random.random(5# 0, 1 사이 실수 난수 배열 1행 5열 생성
print('a1')
print(a1, '\n')
 
a2 = np.random.random((25)) # 0, 1 사이 실수 난수 배열 2행 5열 생성
print('a2')
print(a2, '\n')
 
b1 = np.random.normal(015# 평균 0 표준편차 1인 표준정규분포에서 배열 1행 5열 생성
print('b1')
print(b1, '\n')
 
b2 = np.random.normal(01, (25)) # 평균 0 표준편차 1인 표준정규분포에서 배열 2행 5열 생성
print('a')
print(b2, '\n')
 
c1 = np.random.randint(0105# 1 이상 10 미만의 난수 배열 1행 5열 생성
print('c1')
print(c1, '\n')
 
c2 = np.random.randint(010, (25)) # 1 이상 10 미만의 난수 배열 2행 5열 생성
print('c2')
print(c2, '\n')
cs
a1
[0.3066848  0.90840157 0.87222786 0.91850035 0.78825415] 

a2
[[0.60322073 0.04718743 0.94300727 0.18028388 0.5061824 ]
 [0.08997497 0.61086646 0.71259019 0.68965188 0.74377553]] 

b1
[-1.01498715  1.50017692 -0.16779377  0.00404721  2.65535534] 

a
[[-0.27806349 -0.27178888  0.50877342  0.94603304  0.3728526 ]
 [-0.55631883  0.24828428  0.71419281 -1.68882376 -0.57095571]] 

c1
[0 5 5 4 7] 

c2
[[2 9 7 3 5]
 [4 0 0 6 4]] 

random 함수는 다양한 형태로 활용이 가능한다. 표준정규분포 난수(random.normal), 원하는 구간 사이의 정수 타입의 난수(random.randint), 0과 1 사이의 실수 타입의 난수(random.random)를 소개했는데 이외에도 다양한 형태의 함수가 있다.


numpy의 영역은 너무나 방대해서 Numpy 공식 문서를 참고하는 것을 추천한다. 항상 느끼는 것이지만 본인이 원하는 것을 검색하여 바로 찾아내는 것도 실력이고 그것을 바로 활용하는 것도 실력이다.

https://numpy.org/doc/stable/index.html

 

NumPy documentation — NumPy v1.24 Manual

The reference guide contains a detailed description of the functions, modules, and objects included in NumPy. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.

numpy.org

 

반응형