๐Ÿ–ฅ๏ธSW Engineer

Python ํ•จ์ˆ˜์™€ ๋ชจ๋“ˆ ๊ทธ๋ฆฌ๊ณ  Numpy

์•ž๋™๋„คJIHOON 2022. 11. 12. 01:15

1. format ํ•จ์ˆ˜

weather = "rain"
temp = 30
a = "Weather tomorrow : {}, temp : {}".format(weather,temp)
print(a)

>>> Weather tomorrow : ra, temp : 30

2. lambda ํ•จ์ˆ˜

add = lambda x,y : x+y
add(3,5)

>>> 8

3.๋ชจ๋“ˆ dir ํ•จ์ˆ˜

import math
dir(math)

>>> ['__doc__',
 '__file__',
 '__loader__',
 '__name__',,,,,,,,

4. ๊ธฐ๋ณธ ๋ชจ๋“ˆ

import sys
import calendar
import request    # ํฌ๋กค๋งํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ
import random

5. Numpy

Numpy ๋ชจ๋“ˆ์€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด(ndarray)์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

  • ๋ชจ๋‘ ๊ฐ™์€ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์˜ ์ฐจ์›์„ rank๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ์ „์ฒด ํฌ๊ธฐ๋ฅผ shape๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • ์˜ˆ์‹œ) ํ–‰์ด 2์ด๊ณ  ์—ด์ด 3์ธ ๋ฐฐ์—ด์ด๋ฉด rank =2, shape = (2,3)์ด๋‹ค.

1. ndarray ์ƒ์„ฑํ•˜๊ธฐ

1.&nbspnp.array() ํ•จ์ˆ˜

np.array(๋ฐฐ์—ด) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ndarray๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ returnํ•ด์ค€๋‹ค.

import numpy as np

x= np.array([[1,2,3,4],[5,6,7,8]])
print(x)
print(type(x),x.shape,x.dtype)

>>> [[1 2 3 4]
     [5 6 7 8]]
>>> <class 'numpy.ndarray'> (2, 4) int64

2.&nbspnp.arange() ํ•จ์ˆ˜

np.arange(range์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ) ํ•จ์ˆ˜๋Š” rangeํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ list๋ฅผ ์ƒ์„ฑํ•˜๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

y=np.arange(10)
print(y)

z=np.arange(1,10,2)
print(z)

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

3.&nbspnp.ones() ํ•จ์ˆ˜์™€ np.zeros() ํ•จ์ˆ˜

np.ones((size)) ํ•จ์ˆ˜์™€ np.zeros() ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ size๋งŒํผ 1(๋˜๋Š” 0)๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

a=np.ones((4,5)) # ์›์†Œ๊ฐ€ ๋ชจ๋‘ 1์ธ ndarray ์ƒ์„ฑ
print(a)

>>> [[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]

b = np.zeros((3,4,5))
print(b)

>>> [[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]]

4.&nbspnp.empty() ํ•จ์ˆ˜

np.empty((size)) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ size๋งŒํผ ๋นˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

c = np.empty((3,4)) # ๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ
print(c)

>>> [[0.00000000e+000 7.41098469e-323 0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 5.64233733e-067 5.20094690e-090 2.78857459e+179]
 [6.54513198e-043 2.63311837e-052 3.99910963e+252 1.46030983e-319]]

5.&nbspnp.full() ํ•จ์ˆ˜

np.full((size),๊ฐ’) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ size๋งŒํผ ํŠน์ • ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

d = np.full((2,3),5) # ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑ
print(d)

>>> [[5 5 5]
 [5 5 5]]

6.&nbspnp.eyes() ํ•จ์ˆ˜์™€ np.identity() ํ•จ์ˆ˜

np.eyes(size) ํ•จ์ˆ˜์™€ np.identity(size) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ size์˜ ๋‹จ์œ„ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•œ๋‹ค.

np.eye(3) # ๋‹จ์œ„ํ–‰๋ ฌ ์ƒ์„ฑ

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

7.&nbspnp.linspace() ํ•จ์ˆ˜

np.linespace(์‹œ์ž‘๊ฐ’,๋๊ฐ’,์›์†Œ ๊ฐœ์ˆ˜ ํ•จ์ˆ˜)๋Š” ์ฒ˜์Œ๊ณผ ๋๊นŒ์ง€ ์ •ํ•ด์ง„ ์ˆ˜๋งŒํผ ๊ฐ™์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ ๋ฐฐ์—ด ์ƒ์„ฑํ•œ๋‹ค.

np.linspace(1,10,4) # ์ฒ˜์Œ๊ณผ ๋๊นŒ์ง€ ์ •ํ•ด์ง„ ์ˆ˜๋งŒํผ ๊ฐ™์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ ๋ฐฐ์—ด ์ƒ์„ฑ

>>> array([ 1.,  4.,  7., 10.])

2. Numpy์˜ Randomํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ndarray ์ƒ์„ฑํ•˜๊ธฐ

1.&nbsprand() ํ•จ์ˆ˜

rand(size) ํ•จ์ˆ˜๋Š” 0~1์‚ฌ์ด์˜ ์ˆ˜๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑํ•œ๋‹ค.

np.random.rand(3,4)

>>> array([[0.86276167, 0.60177871, 0.6472568 , 0.64470337],
       [0.40840884, 0.73204089, 0.3245383 , 0.19081743],
       [0.30652447, 0.39284716, 0.3673263 , 0.40596438]])

2.&nbsprandint() ํ•จ์ˆ˜

randint(์‹œ์ž‘๊ฐ’,๋๊ฐ’,(size)) ํ•จ์ˆ˜๋Š” ํŠน์ • ์ •์ˆ˜ ์‚ฌ์ด์˜ ์ˆ˜๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑํ•œ๋‹ค.

np.random.randint(1,100,(3,4,5)) # ํŠน์ • ์ •์ˆ˜ ์‚ฌ์ด์˜ ์ˆ˜๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑ 

>>> array([[[ 3, 61,  2, 43, 82],
        [ 1,  5, 71, 74, 44],
        [25,  1, 22, 16, 33],
        [62, 77,  6, 76, 66]],

       [[21, 95, 92, 77, 70],
        [22, 17, 25, 34, 76],
        [51, 72, 62, 22,  6],
        [75, 81, 10, 57,  8]],

       [[11, 92, 55, 68, 58],
        [ 2, 47,  6, 21, 26],
        [87, 27, 15, 99, 58],
        [62, 11, 52,  7, 47]]])

2.&nbspseed() ํ•จ์ˆ˜

seed(์‹œ์ž‘๊ฐ’) ํ•จ์ˆ˜๋Š” ์‹œ๋“œ๋ฅผ ์ •ํ•ด์ฃผ์–ด ๊ฐ™์€ ์‹œ๋“œ๋กœ ์‹œ์ž‘ํ•œ ๋žœ๋คํ•จ์ˆ˜์—์„œ๋Š” ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ•œ๋‹ค.

np.random.seed(23)
print(np.random.randn(3,4))

np.random.seed(23) # seed๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
print(np.random.randn(3,4))

print(np.random.randn(3,4)) #seed๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋จ

>>> [[ 0.66698806  0.02581308 -0.77761941  0.94863382]
 [ 0.70167179 -1.05108156 -0.36754812 -1.13745969]
 [-1.32214752  1.77225828 -0.34745899  0.67014016]]
>>> [[ 0.66698806  0.02581308 -0.77761941  0.94863382]
 [ 0.70167179 -1.05108156 -0.36754812 -1.13745969]
 [-1.32214752  1.77225828 -0.34745899  0.67014016]]
>>> [[ 0.32227152  0.06034293 -1.04345    -1.00994188]
 [ 0.44173637  1.12887685 -1.83806777 -0.93876863]
 [-0.20184052  1.04537128  0.53816197  0.81211867]]

3.&nbspchoice() ํ•จ์ˆ˜

choice(๋ฐฐ์—ด,(size)) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ๋ฌด์ž‘์œ„๋กœ ๊ณ ๋ฅธ ๊ฐ’๋“ค๋กœ size๋งŒํผ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

print(np.random.choice(100,(2,3))) # 1~100๊นŒ์ง€์˜ ์ •์ˆ˜๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑ

x=[1,2,3,4,5,6]
np.random.choice(x,(2,3),replace = False) # ์ฃผ์–ด์ง„ 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ฑ„์›Œ์ง„ ๋ฐฐ์—ด ์ƒ์„ฑ(์ค‘๋ณตํ—ˆ์šฉ X )

>>> [[66 74 35]
 [96 56 13]]
>>> array([[5, 1, 6],
       [1, 3, 5]])

3. ndarray indexing

1.&nbsp2์ฐจ์› ๋ฐฐ์—ด

x= np.arange(6).reshape(2,3)
print(x)
print(x[0])
print(x[1,:2])

>>> [[0 1 2]
 [3 4 5]]

>>> [0 1 2]
>>> [3 4]

2.&nbsp3์ฐจ์› ๋ฐฐ์—ด

x= np.arange(24).reshape(2,3,4)
print(x)
print(x[0])
print(x[1,:2])
print(x[:1,:2,:3])

>>> [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

>>> [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

>>> [[12 13 14 15]
 [16 17 18 19]]

>>> [[[0 1 2]
  [4 5 6]]]

3.&nbsp๋…ผ๋ฆฌ๊ฐ’์„ ์ด์šฉํ•œ indexing

np.random.seed(103)
x=np.random.randint(1,100,size=10)
print(x)

even_num = x%2==0
print(even_num)

print(x[even_num])
print(x[x%2==0])

>>> [ 8 74 20 92 58 71 29 22 24 56]
>>> [ True  True  True  True  True False False  True  True  True]
>>> [ 8 74 20 92 58 22 24 56]
>>> [ 8 74 20 92 58 22 24 56]

4. ndarray ํ˜•ํƒœ ๋ณ€ํ˜•

1.&nbspreshape() ํ•จ์ˆ˜

reshape(size)ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋ฅผ ๋ณ€ํ˜•ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ๋ณ€๊ฒฝ ์ „,ํ›„์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

x=np.arange(10)
print(x)
print(x.ndim)

y=x.reshape(2,5)
print(x)
print(y,y.ndim)

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

2.&nbsp๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ˜•ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

ravelํ•จ์ˆ˜์™€ flattenํ•จ์ˆ˜๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ˜•ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค. ์ฐจ์ด์ ์€ flattenํ•จ์ˆ˜๋Š” ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค๋Š” ์ ์ด๋‹ค.

print(np.ravel(y,order='c')) #๊ฐ™์€ ํ–‰์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์šฐ์„ 
print(np.ravel(y,order='f')) #๊ฐ™์€ ์—ด์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์šฐ์„ 
y.ravel() # ์ด๋Ÿฐ์‹์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค  

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

5. ndarray ์—ฐ์‚ฐ

1. ๋ฒ”์šฉํ•จ์ˆ˜(universial function)

*๋ฒ”์šฉํ•จ์ˆ˜๋ž€? *
ufunc๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ndarray์˜ ๋ฐ์ดํ„ฐ ์›์†Œ๋ณ„๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

https://codetorial.net/numpy/functions/index.html

6. ndarray axis

1. axis(์ถ•)

*axis๋ž€? *
์ถ•์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ndarray์˜ ๋ฐ์ดํ„ฐ ์›์†Œ๋“ค ์ค‘ ์›ํ•˜๋Š” ์ถ•์„ ์ง€์ •ํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. 1์ฐจ์› ๋ฐฐ์—ด์„ ๋•Œ

x=np.arange(10)
print(x)
print(np.sum(x,axis=0))

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

3. 2์ฐจ์› ๋ฐฐ์—ด์„ ๋•Œ

y=x.reshape(2,5)
print(y)
print(np.sum(y,axis=0)) #์—ด๋ณ„๋กœ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
print(np.sum(y,axis=1)) #ํ–‰๋ณ„๋กœ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

>>> [[0 1 2 3 4]
 [5 6 7 8 9]]
>>> [ 5  7  9 11 13]
>>> [10 35]

4. 3์ฐจ์› ๋ฐฐ์—ด์„ ๋•Œ

z= np.arange(24).reshape(2,3,4)
print(z)
print(np.sum(z,axis=0)) 
print(np.sum(z,axis=1)) 
print(np.sum(z,axis=2))
print(np.sum(z,axis=(0,2)))

>>> [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
>>> [12 14 16 18]
 [20 22 24 26]
 [28 30 32 34]]
>>> [[12 15 18 21]
 [48 51 54 57]]
>>> [[ 6 22 38]
 [54 70 86]]
 >>> [ 60  92 124] #axis๊ฐ€ 0์ผ ๋•Œ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  axis๊ฐ€ 2์ธ ๊ฒฝ์šฐ์˜ ์—ฐ์‚ฐ์„ ํ•œ๋ฒˆ ๋” ์‹คํ–‰์‹œํ‚จ ๊ฒฐ๊ณผ