์ธ๊ณต์ง€๋Šฅ๐Ÿพ/ํŒŒ์ด์ฌ ๊ธฐ๋ณธ

[ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ]1. Numpy

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 2. 5. 16:42
728x90

* ์ด ๊ธ€์€ ๋„ค์ด๋ฒ„ ๋ถ€์ŠคํŠธ ์ฝ”์Šค์˜ ์ธ๊ณต์ง€๋Šฅ(AI) ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

0. numpy๋ž€?

ํŒŒ์ด์ฌ์˜ ๊ณ ์„ฑ๋Šฅ ๊ณผํ•™ ๊ณ„์‚ฐ์šฉ ํŒจํ‚ค์ง€

์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ๋น ๋ฅด๊ณ , ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 

 

1. numpy์˜ ๊ธฐ๋ณธ์  ๋‹จ์œ„

ndarray

 

2. ndarray creation

  • array
import numpy as np
np.array(๋ฆฌ์ŠคํŠธ, ํƒ€์ž…)

Dynamic typing not supported

* python์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ค‘ ํ•˜๋‚˜์ธ dynamic typing(์‹คํ–‰๋  ๋•Œ ๋ฐ์ดํ„ฐ type์„ ์ธ์‹ํ•˜๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›)์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ type๋งŒ ๋ฐฐ์—ด์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

  • arrange
np.arange(start, end, step)
or
np.arange(๋ฒ”์œ„)

reshape์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • zeros : 0์œผ๋กœ ๊ฐ€๋“์ฐฌ ndarray ์ƒ์„ฑ
np.zeros(shape, dtype, order)
  • ones : 1๋กœ ๊ฐ€๋“์ฐฌ ndarray ์ƒ์„ฑ
np.ones(shape, dtype, order)
  • empty : shape๋งŒ ์ฃผ์–ด์ง€๊ณ  ๋น„์–ด์žˆ๋Š” ndarray ์ƒ์„ฑ(์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š๊ณ  ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ์‚ฝ์ž…)
np.empty(shape, dtype)
  • something_like : ๊ธฐ์กด ndarray์˜ shape ํฌ๊ธฐ ๋งŒํผ 0, 1, ๋˜๋Š” ๋นˆ array ๋ฐ˜ํ™˜
    • zeros_like
    • ones_like
    • empty_like
np.somethings_like(ndarray)
  • identity : ๋‹จ์œ„ ํ–‰๋ ฌ์„ ์ƒ์„ฑ
np.identity(n=์ˆซ์ž, dtype)
or
np.identity(N=row์ˆซ์ž, M=col์ˆซ์ž, dtype)
  • eye : ๋Œ€๊ฐ์„ ์ด 1์ธ ํ–‰๋ ฌ์„ ์ƒ์„ฑ
np.eye(N=row์ˆซ์ž, M=col์ˆซ์ž, dtype, k=๋Œ€๊ฐ์„ ์‹œ์ž‘index)
  • ramdom sampling : ๋ฐ์ดํ„ฐ ๋ถ„ํฌ์— ๋”ฐ๋ฅธ sampling์œผ๋กœ array๋ฅผ ์ƒ์„ฑ
    • ๊ท ๋“ฑ๋ถ„ํฌ
    • ์ •๊ทœ๋ถ„ํฌ
#๊ท ๋“ฑ๋ถ„ํฌ
np.random.uniform(start, end, ๊ฐฏ์ˆ˜)

#์ •๊ทœ๋ถ„ํฌ
np.random.normal(start, end, ๊ฐฏ์ˆ˜)

 

- ndarray ๊ธฐ๋ณธ์ •๋ณด

  • axis : ์ถ• (์ƒˆ๋กœ ์ƒ๊ธฐ๋Š” ์ถ•์— 0 ๊ฐ’ ๋ถ€์—ฌ)

Depth : axis=0, Row : axis=1, Col : axis=2

  • dtype : ๋ฐฐ์—ด ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ Type์„ ๋ฐ˜ํ™˜
  • shape : ๋ฐฐ์—ด์˜ dimension ๊ตฌ์„ฑ์„ ๋ฐ˜ํ™˜
    • vector (b, )
    • matrix (a, b)
    • 3rd order tensor (depth, row, col)
  • ndim : number of dimension
  • size : ์ „์ฒด ํฌ๊ธฐ
  • nbytes : ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜

 

3.  shape handling

๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์œ ์ง€ํ•˜๋˜, ํ˜•ํƒœ๋งŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ

  • reshape : ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์œ ์ง€ํ•˜๋˜, ํ˜•ํƒœ๋งŒ ๋ฐ”๊ฟ”์คŒ
    • -1์ด ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ์†์„ฑ์„ ์ฑ„์›Œ์คŒ
  • flatten : ๋‹ค์ฐจ์› array๋ฅผ ์ผ์ฐจ์› array๋กœ ๋ณ€ํ™”์‹œ์ผœ์คŒ

 

4.  ๊ฐ’ ์ผ๋ถ€ ์ถ”์ถœํ•˜๊ธฐ

  • Indexing
ndarray[row, col]
or
ndarray[row][col]
  • Slicing : ํ–‰๊ณผ ์—ด ๋ถ€๋ถ„์„ ๋‚˜๋ˆ ์„œ ์Šฌ๋ผ์ด์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ์Œ
ndarray[row_slicing, col_slicing]

slicing์˜ ๊ฒฝ์šฐ [start:end:step] ํ˜•ํƒœ๋กœ ํ‘œ์‹œ

  • diag : ๋Œ€๊ฐ ํ–‰๋ ฌ์˜ ๊ฐ’์„ ์ถ”์ถœ
np.diag(ndarray, k=start_index)

 

5. ํ•จ์ˆ˜์—ฐ์‚ฐ

  • sum : ์›์†Œ๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
ndarray.sum(dtype=๋ฐ์ดํ„ฐํƒ€์ž…)
  • mean : ์›์†Œ๋“ค์˜ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • std : ์›์†Œ๋“ค์˜ ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • ๊ทธ ์™ธ์˜ ๋‹ค์–‘ํ•œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณต (exponential, trigonometric, hyperbolic ๋“ฑ)
  • ๋ณ‘ํ•ฉ : ndarray๋ฅผ ํ•ฉ์น˜๋Š” ํ•จ์ˆ˜
    • vstack : row ๊ธฐ์ค€ ๋ณ‘ํ•ฉ
    • hstack : col ๊ธฐ์ค€ ๋ณ‘ํ•ฉ
    • concatenate
np.vstack((ndarray1, ndarray2))
or
np.hstack((ndarray1, ndarray2))
or
np.concatenate((ndarray1, ndarray2), axis=์ˆซ์ž)

 

6. ๊ธฐ๋ณธ์—ฐ์‚ฐ

  • transpose : ์ „์น˜ํ–‰๋ ฌ
  • broadcasting : shape์ด ๋‹ค๋ฅธ ๋ฐฐ์—ด ๊ฐ„ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ
    • matrix X scalar(์ˆซ์ž)
    • matrix X vector

broadcasting์ด ์ผ์–ด๋‚˜๋Š” ์˜ˆ์‹œ

  • ์‚ฌ์น™์—ฐ์‚ฐ : ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ๊ฐ’๋“ค๋ผ๋ฆฌ ์—ฐ์‚ฐ
    • +, -, *
  • dot : ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ
ndarray1.dot(ndarray2)

 

7. ๋น„๊ต์—ฐ์‚ฐ

  • all : and ์—ฐ์‚ฐ๊ณผ ๋™์ผ
np.all(๋น„๊ต์—ฐ์‚ฐ)
  • any : or ์—ฐ์‚ฐ๊ณผ ๋™์ผ
np.any(๋น„๊ต์—ฐ์‚ฐ)
  • ndarray๊ฐ„ ๋น„๊ต์—ฐ์‚ฐ : ๊ฐ element๊ฐ„ ๋น„๊ต์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
ndarray1 ๋น„๊ต์—ฐ์‚ฐ ndarray2
  • logical_and
  • logical_not : boolean์„ ๋ฐ˜๋Œ€๋กœ ๋ฐ˜ํ™˜
  • logical_or
  • np.where : ๋ฐ˜ํ™˜๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ๋ฑ์Šค๊ฐ’์ด ๋ฐ˜ํ™˜๋จ
np.where(์กฐ๊ฑด, True์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’, False์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’)
  • isnan : nan ๊ฐ’์ธ์ง€ boolean์œผ๋กœ ๋ฐ˜ํ™˜
  • isfinite : ์œ ํ•œํ•œ ์ˆ˜์ธ์ง€ boolean์œผ๋กœ ๋ฐ˜ํ™˜
  • argmax : ์ตœ๋Œ€๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ (axis๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ)
  • argmin : ์ตœ์†Œ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ (axis๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ)

 

8. boolean / fancy index

  • Boolean Index : ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๊ฐ’์„ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ถ”์ถœ
ndarray[์กฐ๊ฑด]
or
ndarray[boolean_list]#boolean list๋Š” ์กฐ๊ฑด์— ์˜ํ•ด ์‚ฐ์ถœ๋œ ๋ฐฐ์—ด
  • Fancy Index : index value๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• (๊ทธ๋ƒฅ ์ธ๋ฑ์Šค๋ž‘ ๋น„์Šท)
ndarray1[index_ndarray]
or
ndarray1.take(index_ndarray)

 

9. ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ

numpy object(pickle) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ด

Binary ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ

  • ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
np.load(file="ํŒŒ์ผ์ด๋ฆ„.npy")
  • ์ €์žฅํ•˜๊ธฐ
np.save("ํŒŒ์ผ์ด๋ฆ„", arr=ndarray์ด๋ฆ„)
728x90