๊ฐœ๋ฐœ Code/ํŒŒ์ด์ฌ Python

[Python][numpy] Numpy๋กœ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง ๋ฐ ๋‚œ์ˆ˜ ์ƒ์„ฑ

5hr1rnp 2025. 2. 9. 20:53
๋ฐ˜์‘ํ˜•

๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” ๋‚œ์ˆ˜(random number) ์ƒ์„ฑ๊ณผ ์ƒ˜ํ”Œ๋ง(sampling)์ด ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. Numpy์˜ np.random ๋ชจ๋“ˆ์„ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ํ™•๋ฅ  ๋ถ„ํฌ์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ˜ํ”Œ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.


1. ๋‚œ์ˆ˜ ์ƒ์„ฑ์˜ ๊ธฐ๋ณธ


1.1 ๊ท ๋“ฑ ๋ถ„ํฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ

๊ท ๋“ฑ ๋ถ„ํฌ์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด np.random.rand() ๋˜๋Š” np.random.uniform()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

import numpy as np

# 0๊ณผ 1 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜ 5๊ฐœ ์ƒ์„ฑ
random_numbers = np.random.rand(5)
print(random_numbers)

# [0.68210576 0.42857438 0.15101299 0.54555321 0.02568058]

# ํŠน์ • ๋ฒ”์œ„(์˜ˆ: 10~20)์—์„œ ๊ท ๋“ฑ ๋ถ„ํฌ ๋‚œ์ˆ˜ 5๊ฐœ ์ƒ์„ฑ
random_uniform = np.random.uniform(10, 20, 5)
print(random_uniform)

# [13.02513486 13.01353072 17.41235939 16.13056435 19.33079594]

1.2 ์ •๊ทœ ๋ถ„ํฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ

์ •๊ทœ ๋ถ„ํฌ(๊ฐ€์šฐ์‹œ์•ˆ ๋ถ„ํฌ)์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด np.random.randn() ๋˜๋Š” np.random.normal()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ.

# ํ‰๊ท  0, ํ‘œ์ค€ํŽธ์ฐจ 1์ธ ์ •๊ทœ๋ถ„ํฌ์—์„œ ๋‚œ์ˆ˜ 5๊ฐœ ์ƒ์„ฑ
normal_random = np.random.randn(5)
print(normal_random)

# [1.69753115 0.42420459 0.81921845 0.75193326 1.25570611]

# ํ‰๊ท  10, ํ‘œ์ค€ํŽธ์ฐจ 2์ธ ์ •๊ทœ๋ถ„ํฌ์—์„œ ๋‚œ์ˆ˜ 5๊ฐœ ์ƒ์„ฑ
normal_custom = np.random.normal(10, 2, 5)
print(normal_custom)

# [ 8.63078874 11.81641683  7.50887906  8.87855625 11.51443264]

2. ์ •์ˆ˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ


์ •์ˆ˜ ๋ฒ”์œ„์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด np.random.randint()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จ.

# 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ •์ˆ˜ ๋‚œ์ˆ˜ 5๊ฐœ ์ƒ์„ฑ
random_integers = np.random.randint(0, 10, 5)
print(random_integers)

# [4 8 4 2 4]

728x90
๋ฐ˜์‘ํ˜•

3. ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง


Numpy๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ์—์„œ ์ƒ˜ํ”Œ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•จ

3.1 ๋ฐฐ์—ด์—์„œ ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ ์„ ํƒ (choice)

np.random.choice()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Œ

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

# ๋ฐฐ์—ด์—์„œ 3๊ฐœ ์ƒ˜ํ”Œ ์„ ํƒ (์ค‘๋ณต ํ—ˆ์šฉ)
sampled = np.random.choice(arr, 3)
print(sampled)

# [5 2 4]

# ๋ฐฐ์—ด์—์„œ 3๊ฐœ ์ƒ˜ํ”Œ ์„ ํƒ (์ค‘๋ณต ์—†์Œ)
sampled_unique = np.random.choice(arr, 3, replace=False)
print(sampled_unique)

# [4 5 1]

3.2 ์ƒ˜ํ”Œ๋ง์„ ์œ„ํ•œ ํ™•๋ฅ  ๊ฐ€์ค‘์น˜ ์ ์šฉ

์„ ํƒ ํ™•๋ฅ ์„ ์กฐ์ •ํ•˜๋ ค๋ฉด p ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

# ์„ ํƒ ํ™•๋ฅ ์„ ์ ์šฉํ•œ ์ƒ˜ํ”Œ๋ง
weighted_sample = np.random.choice(arr, 3, p=[0.1, 0.2, 0.3, 0.2, 0.2])
print(weighted_sample)

# [2 5 3]

4. ๋‚œ์ˆ˜ ์ƒ์„ฑ ์‹œ๋“œ ์„ค์ •


๊ฐ™์€ ๋‚œ์ˆ˜๋ฅผ ์žฌํ˜„ํ•˜๋ ค๋ฉด np.random.seed()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•จ

np.random.seed(42)
print(np.random.rand(3))

# [0.37454012 0.95071431 0.73199394]

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋จ. ์ด๋ฅผ ํ†ตํ•ด ์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Œ


5. ๋งˆ๋ฌด๋ฆฌ


Numpy์˜ np.random ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ํ™•๋ฅ  ๋ถ„ํฌ์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ˜ํ”Œ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ์‹œ๋“œ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋™์ผํ•œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์‹คํ—˜์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•์€ ๋ฐ์ดํ„ฐ ๋ถ„์„, ๋จธ์‹ ๋Ÿฌ๋‹, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•