Studying/Python

[Basic Python] 005. Numpy (1)

gracie day 2025. 8. 15. 08:00
๋ฐ˜์‘ํ˜•

๐ŸŽˆ numpy ์ดํ•ดํ•˜๊ธฐ

numpy๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

 

numpy์˜ ์ฐจ์›์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

- 1์ฐจ์› ์ถ•(ํ–‰) : axis 0 => Vector
- 2์ฐจ์› ์ถ•(์—ด) : axis 1 => Matrix(ํ–‰๋ ฌ)
- 3์ฐจ์› ์ถ•(์ฑ„๋„) : axis 2 -> Tensor(3์ฐจ์› ์ด์ƒ)

 


๐ŸŽˆ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ

1. list๋ฅผ numpy๋กœ ๋ณ€ํ™˜ํ•ด๋ณด์ž

#list๋ฅผ numpy๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
import numpy as np # ๋„˜ํŒŒ์ด ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์•ž์œผ๋กœ np๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

list_data = [1,2,3] 
array = np.array(list_data) #list_data๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

print(array) 
print(array.size) #๋ฐฐ์—ด์˜ ํฌ๊ธฐ(์›์†Œ ๋ช‡ ๊ฐœ์ธ๊ฐ€?)
print(array.dtype) #๋ฐฐ์—ด ์›์†Œ์˜ ํƒ€์ž…
print(array[1]) #๋ฐฐ์—ด์ค‘์˜ ํŠน์ • ์œ„์น˜์˜ ์›์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ
[1 2 3]
3
int64
2

 

***np.array()๋Š” ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ๊ณผ ๊ฐ™์€ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜

***array.size๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋งํ•˜๋ฉฐ, '๋ช‡ ๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?'๋ฅผ ๋ณธ๋‹ค

***array.dtype์€ ๋ฐฐ์—ด ์›์†Œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋งํ•œ๋‹ค


2. 1์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ(ํ–‰)

import numpy as np

array1 = np.arange(4)
print(array1)
[0 1 2 3]

 

***np.arange(์‹œ์ž‘๊ฐ’,๋๊ฐ’,์Šคํ…๊ฐ’)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ˆ˜ ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค. ํ•˜์ง€๋งŒ start,end,step ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹ค์ˆ˜ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ๋˜๋ฉด ๊ฒฐ๊ณผ ๋ฐฐ์—ด๋„ ์‹ค์ˆ˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑ๋œ๋‹ค.


3. 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ(๋ชจ๋“  ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •)

import numpy as np
array2 = np.zeros((4,4),dtype=float)
print(array2)
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

np.zeros(shape, dtype)์ด๋ฉฐ, ์ƒ์„ฑํ•  ๋ฐฐ์—ด์˜ ํ˜•ํƒœ์™€ ๋ฐ์ดํ„ฐํƒ€์ž…์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด, ๋ชจ๋“  ์›์†Œ๊ฐ€ 0์ธ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋œ๋‹ค.


4. 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ(๋ชจ๋“  ๊ฐ’์„ 1๋กœ ์„ค์ •)

import numpy as np

array3 = np.ones((3,3), dtype=str)
print(array3)
[['1' '1' '1']
 ['1' '1' '1']
 ['1' '1' '1']]

np.ones(shape,dtype)์ด๋ฉฐ, ๋ชจ๋“  ์›์†Œ๊ฐ€ 1์ธ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.


5. 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ (๋žœ๋ค๊ฐ’์œผ๋กœ ์„ค์ •)

import numpy as np

array4 = np.random.randint(0,10, (3,3)) #random.randint(start,end,(๋ฐฐ์—ด))
print(array4)
[[1 0 9]
 [5 1 3]
 [7 9 3]]

 

***np.random.randint(start,end,(๋ฐฐ์—ด)) ํ•จ์ˆ˜๋Š” ๋ฌด์ž‘์œ„๋กœ ์ •์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋งŒ


6. ๊ธฐํƒ€ ๋žœ๋ค ๋ชจ๋“ˆ์˜ ํ•จ์ˆ˜

  • np.random.rand(): 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ท ๋“ฑ ๋ถ„ํฌ์—์„œ ๋ฌด์ž‘์œ„ ์‹ค์ˆ˜ ์ƒ์„ฑ
  • np.random.randn(): ํ‘œ์ค€ ์ •๊ทœ ๋ถ„ํฌ์—์„œ ๋ฌด์ž‘์œ„ ์‹ค์ˆ˜ ์ƒ์„ฑ
  • np.random.normal(): ์ง€์ •๋œ ํ‰๊ท ๊ณผ ํ‘œ์ค€ ํŽธ์ฐจ๋ฅผ ๊ฐ€์ง€๋Š” ์ •๊ทœ ๋ถ„ํฌ์—์„œ ๋ฌด์ž‘์œ„ ์‹ค์ˆ˜ ์ƒ์„ฑ

๐ŸŽˆ ๋ฐฐ์—ด ํ•ฉ์น˜๊ณ  ๋‚˜๋ˆ„๊ธฐ

1. ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ

import numpy as np

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

print(array3)
print(array3.shape)

array4 = array3.reshape((2,3))
print(array4)
[1 2 3 4 5 6]
(6,)
[[1 2 3]
 [4 5 6]]

 

*** np.concatenate([array1, array2, ...], axis=none) ํ•จ์ˆ˜๋Š” Numpy ๋ฐฐ์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š”(concatenate) ํ•จ์ˆ˜์ด๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐฐ์—ด์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ง€์ •๋œ ์ถ•(axis)์„ ๋”ฐ๋ผ ์ด์–ด ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

***np.reshape(new_shape) ํ•จ์ˆ˜๋Š” ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” (ํ–‰, ์—ด)์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.


2. ๋ฐฐ์—ดํ•ฉ์น˜๊ธฐ(2)

array5 = np.arange(4).reshape(1,4)
array6 = np.arange(8).reshape(2,4)

array7 = np.concatenate([array5, array6], axis=0)
print(array7)
[[0 1 2 3]
 [0 1 2 3]
 [4 5 6 7]]

3. ๋ฐฐ์—ด ๋‚˜๋ˆ„๊ธฐ

import numpy as np

array = np.arange(8).reshape(2,4)
left,right = np.split(array,[2], axis=1)

print(left)
print(right)
[[0 1]
 [4 5]]
[[2 3]
 [6 7]]

 

๋ฐ˜์‘ํ˜•