Chapter 10. Numpy#
ํ์ต๋ชฉํ์ ๊ธฐ๋ํจ๊ณผ
ํ์ต๋ชฉํ
๋ฐฐ์ด์ ์์ฑํด๋ณด๊ณ ๋ค๋ค๋ณด์.
๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ์ฐจ์ด๋ฅผ ์์๋ณด์.
Shallow copy์ Deep Copy๋ฅผ ์ดํดํ์.
๊ธฐ๋ํจ๊ณผ
๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ ์ ํ ์๋ฃํ์ ์ ํํ ์ ์๊ณ ๋ค๋ฃฐ ์ ์๋ค.
๋ฐฐ์ด(Array)#
numpy๋ Number์ python์ ํฉ์ฑ์ด์ด๋ค.
ํ๋ ฌ์ด๋ ๋๊ท๋ชจ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ, ๊ฐ๋จํ ๊ธฐ๋ฅ๋ถํฐ ๊ณ์ฐ๊ณผํ ๋ถ์ผ์ ๋ณต์กํ ์ฐ์ฐ์ ์ง์ํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค๊น์ง ํฌํจ๋์ด ์๋ค.
ํ๋ ฌ์ ํ๊ณผ ์ด์ด ์๋ ๊ฒ, ๋ฐฐ์ด์ ํ๋ ฌ์ ์ฌ๋ฌ๊ฐ ์์์ฌ๋ฆฐ ๊ฒ์ด๋ค.
numpy์ ๋ฐฐ์ด์๋ ๋ชจ๋ ๋์ผํ ์๋ฃํ๋ง ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค.
numpy๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ import๋ก ๋ชจ๋์ ๋ถ๋ฌ์์ผํ๋ค.
๊ณต๊ณต์ฐํ ์ฝ์์ฒ๋ผ numpy๋ชจ๋์ ๋ณดํต np๋ผ๋ ๋ณ์นญ์ผ๋ก ๋ถ๋ฆฌ์ด๋ค.
๋ณ์นญ์ as๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ๋ค.
import numpy as np
1-D array ์์ฑํ๊ธฐ#
1์ฐจ์ ๋ฐฐ์ด๋ถํฐ ๋ง๋ค์ด๋ณด์.
numpy๋ชจ๋์์๋ ๋ฐฐ์ด์ ์์ฑํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ง์ํ๋ค.
numpy ๋ชจ๋์
array()
๋ฅผ ํตํด ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค.numpy ๋ชจ๋์
arange()
๋ฅผ ํตํด ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค.
np.array(๋ฆฌ์คํธ or range())
np.arange(start, end, step)
ar1 = np.array([1,2,3,4,5])
ar11 = np.array(range(10))
ar111= np.arange(1,6)
print(ar1)
print(ar11)
print(ar111)
[1 2 3 4 5]
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
numpy๋ก ๋ง๋ ๋ฐฐ์ด์ ๋ค์ํ ๋ชฉ์ ์ ์ํด ์ฌ์ฉ๋์ง๋ง ์ ํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด ๋ฐฐ์ด์ ํ์ฉํ๋ ํ๋์ ์๋ฅผ ๋ณด๋๋ก ํ์.
๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์์์ ๋ค์๊ณผ ๊ฐ๋ค.
\(y=2x^2-3x+1\)
ํ์ด์ฌ์ผ๋ก ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ matplotlib.pyplot ๋ชจ๋์ ๋ถ๋ฌ์์ผ ํ๋ค.
matplotlib.pyplot ๋ชจ๋์ ๋ณดํต plt๋ผ๋ ๋ณ์นญ์ผ๋ก ๋ถ๋ฆฌ์ด๋ค.
plt์ plot()์ ์ ํ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์์ด๋ค.
ํ์ด์ฌ์์๋ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ธ๋ค๊ณ ํด์ ํ๋ฉด์ ๋ฐ๋ก ๋ณด์ฌ์ฃผ์ง ์๋๋ค. plt.show()๋ ๊ทธ๋ํ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ํจ์์ด๋ค.
plt.plot(x์ถ ๋ฐ์ดํฐ, y์ถ ๋ฐ์ดํฐ)
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)
y = 2*(x**2)-3*x+1
plt.plot(x, y)
plt.show()
<Figure size 640x480 with 1 Axes>
2-D array ์์ฑํ๊ธฐ#
2์ฐจ์ ๋ฐฐ์ด์ ํ(Row)๊ณผ ์ด(Column)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.

ํ์ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ค์ ์ธ์ด ๊ฒ์ด๋ฉฐ, ์ด์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ค์ ์ธ์ด ๊ฒ์ด๋ค.
2์ฐจ์ ๋ฐฐ์ด์ array()์ ์ค์ฒฉ ๋ฆฌ์คํธ๋ฅผ ๋ฃ์ด์ฃผ๊ฑฐ๋, arange()๋ก 1์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ํ ๋ฐฐ์ด๋ชจ์์ ๋ฐ๊ฟ์ฃผ๋ reshape()์ ํตํด์ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ ์ ์๋ค.
np.array([๋ฆฌ์คํธ of ๋ฆฌ์คํธ])
np.arange(start,end,step).reshape(row, column)
์ฌ๊ธฐ์ row๋ ํ์ ๊ฐ์, column์ ์ด์ ๊ฐ์์ด๋ค. column์ -1๋ก ์จ์ฃผ๋ฉด ๊ฐ ํ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋๊ฐ์ด ์ ์ฉํด์ค๋ค. ์ด๋ฅผ ์ํด์๋ ๋ฐฐ์ด ์์์ ๊ฐ์์ row*column์ ๊ฐ์๊ฐ ๊ฐ์์ผ ํ๋ค.
ar2 = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
ar22 = np.arange(1,13).reshape(4,3)
ar222 = ar2.reshape(3,-1)
print(ar2)
print(ar22)
print(ar222)
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
len() ํจ์๋ฅผ ํตํด ๋ฐฐ์ด์ ํ, ์ด, ์์์ ๊ฐ์๋ฅผ ํ์ธํ ์ ์๋ค.
2์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋
len(๋ฐฐ์ด๋ช )
๊ณผ ๊ฐ์ด len() ๊ดํธ์์ ๋ฐฐ์ด๋ช ์ ๋ฃ๋๋ค. ์ด๋ 1์ฐจ์ ๋ฐฐ์ด์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค.2์ฐจ์ ๋ฐฐ์ด์ ์ด์ ๊ฐ์๋ฅผ ํ์ธํ๋ ค๋ฉด
len(๋ฐฐ์ด๋ช [ํ์ธ๋ฑ์ค])
์ ๊ฐ์ด ํ์ธ๋ฑ์ค๋ฅผ ๋ฃ๋๋ค.
print(f'number of rows: {len(ar2)}')
print(f'number of columns: {len(ar2[0])}')
number of rows: 4
number of columns: 3
3-D array ์์ฑํ๊ธฐ#
3์ฐจ์ ๋ฐฐ์ด์ ๋ฉด(page), ํ, ์ด์ ๊ฐ์ง๋ค.
์์ฑํ๋ ๋ฐฉ๋ฒ์ 2์ฐจ์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ๋ฆฌ์คํธ๊ฐ 3๋ฒ ์ค์ฒฉ๋๋ค.
np.array([๋ฆฌ์คํธ of ๋ฆฌ์คํธ of ๋ฆฌ์คํธ])
np.arange(start,end,step).reshape(page, row, column)
ar3 = np.array([[[1,2,3], [4,5,6]],
[[7,8,9], [10,11,12]]])
print(ar3)
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
๐3์ฐจ์ ๋ฐฐ์ด ์์ฑํ๊ธฐ1
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์ ์์ฑํ์์ค.
[[[100 90 80]
[ 70 60 50]]
[[ 15 25 35]
[ 45 55 65]]
[[ 11 22 33]
[ 44 55 66]]]
3์ฐจ์ ๋ฐฐ์ด์ ์ด์ ๊ฐ์๋
len(๋ฐฐ์ด๋ช [๋ฉด์ธ๋ฑ์ค,ํ์ธ๋ฑ์ค])
๋ก ํ์ธํ ์ ์๋ค.
print(f'number of pages: {len(ar3)}')
print(f'number of rows: {len(ar3[0])}')
print(f'number of columns: {len(ar3[0,0])}')
number of pages: 2
number of rows: 2
number of columns: 3
๋ฐฐ์ด์ ๊ตฌ์ฑ, ์ฐจ์ ๋ฑ์ ์ ๋ณด๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ณ์๋ฅผ ์ธ ์ ์๋ค.
๋ฐฐ์ด๋ช
.ndim
๋ฐฐ์ด๋ช
.shape
๋ฐฐ์ด๋ช
.size
ndim: ๋ฐฐ์ด์ ์ถ ๋๋ ์ฐจ์์ ๊ฐ์
shape: ๋ฐฐ์ด์ ๋ชจ์์ด๋ฉฐ, (m,n)ํ์์ผ๋ก ๋ํ๋๋ค.
size: ๋ฐฐ์ด ์์์ ๊ฐ์. shape๋ด์ ์์์ ํฌ๊ธฐ์ ๊ณฑ๊ณผ ๊ฐ๋ค. ์ฆ shape์ m*n์ size์ ๊ฐ๋ค.
print(ar3.ndim)
print(ar3.shape)
print(ar3.size)
3
(2, 2, 3)
12
Vectorization operation#
1์ฐจ์์ผ๋ก ๋ฌถ์ ์๋ฅผ ์ํ์์ ๋ฒกํฐ(vector)๋ผ๊ณ ํ๋ค. ๋ฒกํฐ์ฐ์ฐ์ ๋ฒกํฐ์ ๋์ผ ์ธ๋ฑ์ค์ ์์นํ ์์๋ค๋ผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๋ ๊ธฐ๋ฅ์ด๋ค. numpy์์๋ ์ฌ์น์ฐ์ฐ, ๋ ผ๋ฆฌ์ฐ์ฐ, ๋น๊ต์ฐ์ฐ์ ๋ํด ๋ชจ๋ ๋ฒกํฐ์ฐ์ฐ์ ์ง์ํ๋ค.
๋ชจ๋ ์ฌ์น์ฐ์ฐ์ ๋ํด ๋ฒกํฐ์ฐ์ฐ์ ํ๋ค.
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
ํ๋ ฌ๋ผ๋ฆฌ ์ฐ์ฐํ ๋ ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ์ด๋ฅผ ์๋์ผ๋ก ํ๋ํด ์ฃผ๋ ๊ธฐ๋ฅ์ ๋ธ๋ก๋์บ์คํ ์ด๋ผ๊ณ ํ๋ค.

ar0 = np.arange(12).reshape(4, 3)
ar1 = np.arange(3)
ar2 = np.arange(4).reshape(4, 1)
print(ar0, '\n\n', ar1, '\n\n', ar2)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[0 1 2]
[[0]
[1]
[2]
[3]]
ar0 + ar1
array([[ 0, 2, 4],
[ 3, 5, 7],
[ 6, 8, 10],
[ 9, 11, 13]])
ar0 + ar2
array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10],
[12, 13, 14]])
๋ชจ๋ ๋น๊ต์ฐ์ฐ์ ๋ํด ๋ฒกํฐ์ฐ์ฐ์ ํ๋ค.
print(b>10)
print((b%2)==1)
[False False False]
[False True False]
๋ชจ๋ ๋ ผ๋ฆฌ์ฐ์ฐ์ ๋ํด ๋ฒกํฐ์ฐ์ฐ์ ํ๋ค. ๊ทธ๋ฌ๋ and, or, not ์ฐ์ฐ์ ๊ธฐํธ๋ฅผ ์ฐ์ง ์๋๋ค.
๊ธฐํธ ์ด์ธ์ ๋ณ๋์ ๋ ผ๋ฆฌ์ ์ธ ์ฐ์ฐ์ ํ ์ ์๋ ํจ์(logical_and(), logical_or(),logical_not()..)๋ ์กด์ฌํ๋ค.
and๋
&
,or๋
|
,not์
~
๋ก ์ด๋ค.
a = np.array([160,175,157])
c = np.array(['์ฌ','์ฌ','๋จ'])
print((a>162) | (c=='์ฌ'))
[ True True False]
๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ๋น๊ต#
์ผํ ๋น์ทํด ๋ณด์ด์ง๋ง ์์ ํ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ํ์ด์ฌ์ ๋ฆฌ์คํธ(list)์ numpy์ ๋ฐฐ์ด(array)์ ์ฐจ์ด๋ฅผ ๊ฐ๋จํ ๋น๊ตํด๋ณด์.
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์์ฑ์์,
๋ฆฌ์คํธ๋ ์ ์, ์ค์, ๋ฌธ์์ด, ๋ฆฌ์คํธ ๋ฑ ๋ค์ํ ์๋ฃํ์ ํ๋์ ๋ฆฌ์คํธ์ ๋ด์ ์ ์๋ค.
๋ฐฐ์ด์ ๋์ผํ ์๋ฃํ๋ง ํ๋์ ๋ฐฐ์ด์ ๋ด์ ์ ์๋ค.
ํ์ ์,
๋ฆฌ์คํธ๋ list ํ์ ์ด๋ค.
๋ฐฐ์ด์ numpy.ndarray ํ์ ์ด๋ค.
์ถ๋ ฅํํ
๋ฆฌ์คํธ๋ ๋๊ดํธ์์ ์ฝค๋ง(,)๋ก ์์ดํ ์ ๊ตฌ๋ถํ๋ค.
๋ฐฐ์ด์ ๋๊ดํธ์์ ๊ตฌ๋ถ๊ธฐํธ ์์ด ๊ณต๋ฐฑ์ผ๋ก๋ง ์์๋ฅผ ๊ตฌ๋ถํ๋ค.
its_list = ['๋ฐ๋๋', '๋ธ๊ธฐ', 100, 5.5,['BTS', '๋ธ๋ํํฌ']]
its_array = np.array([1, 2, 3.0])
its_array1 = np.array([1, 2, '3.0'])
its_array2 = np.array([1, 2, None])
print(its_list)
print(its_array)
print(its_array1)
print(its_array2)
print(type(its_list), type(its_array), type(its_array1), type(its_array2))
['๋ฐ๋๋', '๋ธ๊ธฐ', 100, 5.5, ['BTS', '๋ธ๋ํํฌ']]
[1. 2. 3.]
['1' '2' '3.0']
[1 2 None]
<class 'list'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'>
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ๊ณฑ์ ์ฐ์ฐ์ ํด๋ณด์์ ๋,
๋ฆฌ์คํธ์์ ๊ณฑ์ ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ด ๋ถ์ด๋ concatenate์ด๋ค. ์ฆ, ๊ฐ ์์์ ๊ณฑ์ ์ ํ์ง ์๋๋ค.
๋ฐฐ์ด์ ๊ฐ ์์์ ๋ฒกํฐ์ฐ์ฐ์ ํ๋ค.
print(its_list*2)
print('========')
print(its_array*2)
['๋ฐ๋๋', '๋ธ๊ธฐ', 100, 5.5, ['BTS', '๋ธ๋ํํฌ'], '๋ฐ๋๋', '๋ธ๊ธฐ', 100, 5.5, ['BTS', '๋ธ๋ํํฌ']]
========
[2. 4. 6.]
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ๋ฉ์๋
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์๋ฃํ์ด ๋ค๋ฅด๋ฏ๋ก ์ง์ํ๋ ๋ฉ์๋์ ์ข ๋ฅ๋ ๋ค๋ฅด๋ค.
์๋ฅผ ๋ค์ด, ๋ฆฌ์คํธ์์๋ mean, argmax, round ๋ฑ์ ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์๋๋ค. ๊ทธ ์ด์ ๋ ๋ฆฌ์คํธ์๋ ๋ค์ํ ์๋ฃํ์ ์ ์ฅํ ์ ์๋๋ฐ ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด์ ํ๊ท , ์ต๋๊ฐ, ์์์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
mean: ํ๊ท
argmax: ์ต๋๊ฐ ์ธ๋ฑ์ค
round: ์ซ์๋ฅผ ์ง์ ํ ์๋ฆฌ์๋ก ๋ฐ์ฌ๋ฆผ
โฆ
๋ฐ๋ฉด, ๋ฐฐ์ด์์๋ append, remove, extend ๋ฑ ๋ฆฌ์คํธ ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์๋๋ค.
append: ์์ ์ถ๊ฐ
remove: ์์ ์ญ์
extend: ๋ฆฌ์คํธ ํ์ฅ
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์ฐ์ฐ์๋
๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์ฐ์ฐ์๋๋ฅผ ํ์ธํด๋ณด์.
์ต๊ฐ์ ์ซ์์ ๋ํด์ 2๋ฅผ ๊ณฑํ๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ฐฐ์ด(array)๊ฐ 10๋ฐฐ ์ด์ ๋น ๋ฅด๋ค.
๋ฐฐ์ด์ ๋์ผํ ์๋ฃํ๋ง ์ ์ฅํ๋ฏ๋ก ๋ฐ์ดํฐ ์ ์ฅ์ ํ์ํ ์ ์ฅ๊ณต๊ฐ์ด ์ผ์ ํ๋ฉฐ ์ฐ์์ ์ด๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ธก๋ฉด์์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค.
๋ฐ๋ฉด, ๋ฆฌ์คํธ๋ ๋ค์ํ ์๋ฃํ์ ์ ์ฅํ ์ ์์ด์ ํ์ํ ์ ์ฅ๊ณต๊ฐ์ด ์ผ์ ํ์ง ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ํ๋๊ณต๊ฐ๋ ์ฐ์์ ์ด์ง ์๋ค. ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ง ์ด๋ ๋ช ๋ฒ์งธ ๋ฐ์ดํฐ์ธ๊ฐ ์ ๋๋ฅผ ์๋ฏธํ๋ค.
import time
a = list(range(10 ** 8))
start = time.time()
[i *2 for i in a]
end = time.time()
print(f'๋ฆฌ์คํธ ์คํ์๊ฐ: {end - start}')
a = np.array(range(10 ** 8))
start = time.time()
a * 2
end = time.time()
print(f'๋ฐฐ์ด ์คํ์๊ฐ: {end - start}')
์ธ๋ฑ์ฑ#
1์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ฑํ๋ ๊ฒ์ ๋ฆฌ์คํธ์ ๋์ผํ๋ค.
ar=np.arange(12)
print(ar, '\n\n===๊ฒฐ๊ณผ===')
print(ar[5])
[ 0 1 2 3 4 5 6 7 8 9 10 11]
===๊ฒฐ๊ณผ===
5
2์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๊ดํธ๋ฅผ ์ฐ์ํ์ฌ ์ฐ๊ณ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ฐ ๋ฃ๊ฑฐ๋ ํ๋์ ๋๊ดํธ์ ์ฝค๋ง๋ก ๊ตฌ๋ถํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ค๋ค.
- ๋ฐฐ์ด๋ช
[ํ์ธ๋ฑ์ค][์ด์ธ๋ฑ์ค]
- ๋ฐฐ์ด๋ช
[ํ์ธ๋ฑ์ค,์ด์ธ๋ฑ์ค]
ar[1][2]์ ๊ฐ์ด ๋๊ดํธ๋ฅผ ์ฐ์ํ์ฌ ์ฐ๋ฉด ๊ฐ์ฅ ์ ๋๊ดํธ๋ถํฐ ์ธ๋ฑ์ฑ ํ์ฌ ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๋ค์ ๋๊ดํธ์ ์ธ๋ฑ์ฑ์ ์ฐจ๋ก๋๋ก ํ๋ค. ์ฆ, ์์ ๋๊ดํธ๋ฅผ ํตํด ๋์จ ๊ฒฐ๊ณผ๊ฐ ์์ ๋ฒ์์ ๋์์ด ๋๋ค.
ar[1,2]์ ๊ฐ์ด ๋๊ดํธ๋ฅผ ํ๋ ์ฐ๊ณ ํ๊ณผ ์ด์ ์ฝค๋ง๋ก ๊ตฌ๋ถํ๋ฉด ์์ ๋ฒ์๊ฐ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ค.
ar=np.arange(12).reshape(4,3)
print(ar, '\n\n===๊ฒฐ๊ณผ===')
print(ar[1][2])
print(ar[1,2])
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
===๊ฒฐ๊ณผ===
5
5
์ฌ๋ผ์ด์ฑ#
์ฌ๋ผ์ด์ฑ์ ๊ฒฝ์ฐ์๋ ๋๊ดํธ๋ฅผ ์ฐ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๊ณผ ํ๋์ ๋๊ดํธ์ ์ฝค๋ง๋ก ๋์ดํ๋ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅผ ์๋ ์๋ค.
ar=np.arange(12).reshape(3,4)
print(ar)
print('\n\n===์ฐ์๋ ๋๊ดํธ ๊ฒฐ๊ณผ===')
print(ar[1:][1:])
print('\n\n===ํ๋์ ๋๊ดํธ ๊ฒฐ๊ณผ===')
print(ar[1:, 1:])
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
===์ฐ์๋ ๋๊ดํธ ๊ฒฐ๊ณผ===
[[ 8 9 10 11]]
===ํ๋์ ๋๊ดํธ ๊ฒฐ๊ณผ===
[[ 5 6 7]
[ 9 10 11]]
์์ ์ฝ๋์์ ar[1:]์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
[[ 4 5 6 7]
[ 8 9 10 11]]
์ด ๊ฒฐ๊ณผ๋ฅผ ๋์์ผ๋ก ๋๋ฒ์งธ ๋๊ดํธ [1:]์ ์ฌ๋ผ์ด์ฑํ๋ค. ๊ฒฐ๊ณผ๋ [ 8 9 10 11]๊ฐ ์ฌ๋ผ์ด์ฑ ๋๋ค.
ar[1:, 1:]๋ ar ์ ์ฒด๋ฅผ ๋์์ผ๋ก ์์ ํ๋ฏ๋ก ํ์ 1ํ๋ถํฐ ๋๊น์ง, ๊ทธ ๋ฒ์์์ ์ด์ด 1์ด๋ถํฐ ๋๊น์ง๋ฅผ ์ฌ๋ผ์ด์ฑํ๋ค.
๋ฐฐ์ด์ ์ ์ฉํ ํจ์๋คI#
๋ฐฐ์ด์ ์์ฑํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ ์ฉํ ํจ์๋ฅผ ์ดํด๋ณธ๋ค.
zeros()
ones()
np.random
linspace()
transpose()
zeros()#
zeros(): 0์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ ์์ฑํ๋ค.
ar_zero = np.zeros((3,6))
print(ar_zero)
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
ones()#
ones(): 1๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ ์์ฑํ๋ค.
ar_one = np.ones((3,6))
print(ar_one)
[[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]]
np.random#
0 โค ์ค์ < 1๋ก ์ฑ์ฐ๊ธฐ: np.random.random(๋ฐฐ์ด์ํฌ๊ธฐ)
a โค ์ค์ < b๋ก ์ฑ์ฐ๊ธฐ: np.random.uniform(a, b, ๋ฐฐ์ด์ํฌ๊ธฐ)
a โค ์ ์ < b๋ก ์ฑ์ฐ๊ธฐ: np.random.randint(a, b, ๋ฐฐ์ด์ํฌ๊ธฐ)
print(np.random.random((2,5)))
[[0.77940493 0.88270883 0.66267158 0.09506013 0.18534792]
[0.73099336 0.79767484 0.52078119 0.30416251 0.06309633]]
print(np.random.uniform(3.5, 4, (3,2)))
[[3.50662387 3.73880787]
[3.53012612 3.8622706 ]
[3.60406103 3.91699516]]
print(np.random.randint(-5, 5, (2,3,4)))
[[[ 1 3 2 -4]
[-2 -2 4 4]
[-4 -5 3 1]]
[[ 1 3 0 3]
[ 2 3 -1 -2]
[-5 -4 2 -1]]]
๋๋คํ๊ฒ ์์ฑํ ์๋ฅผ ๊ฐ์ง 2์ฐจ์ ๋ฐฐ์ด๋ก ์ฐํฌ๋ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด์.
์ฐํฌ๋ ๊ทธ๋ํ๋ plt.scatter()๋ก ๊ทธ๋ฆด ์ ์๋ค.
๋๋ถ๋ถ์ ํจ์๋ค์ ๋ง์ ์ต์ ๋ค์ ๊ฐ์ง๊ณ ์๊ณ scatter()ํจ์ ๋ํ ์ต์ ์ด ๋ง๋ค.
help(plt.scatter)
๋ก ์ต์ ์ ํ์ธํด๋ณด๊ธฐ ๋ฐ๋๋ค.
plt.scatter(x์ถ ์ขํ, y์ถ ์ขํ)
import matplotlib.pyplot as plt
rd_num = np.random.randint(0,100,(50,2))
plt.scatter(rd_num[:,0], rd_num[:, 1],s=100)
plt.show()

2์ฐจ์ ๋ฐฐ์ด rd_num์ 0ํ๋ถํฐ 9ํ๊น์ง์ ๋ฐฐ์ด์ ํ์ธํด๋ณด์.
print(rd_num[0:10])
[[ 0 18]
[95 52]
[12 81]
[60 38]
[21 74]
[38 50]
[11 60]
[42 76]
[84 15]
[45 80]]
linspace()#
linspace(): ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋ฑ๋ถํ ๋ฐฐ์ด์ ์์ฑํ๋ค.
np.linspace(start,end,๊ฐ์)
print(np.linspace(0,15,4))
[ 0. 5. 10. 15.]
linspace()๋ก ์์ฑํ ๋ฐฐ์ด์ ์ ํ ๊ทธ๋ํ์ y์ถ์ ๊ฐ์ ์์ฑํ๋๋ฐ ์ฌ์ฉํด๋ณด์.
x = np.linspace(100000, 700000, 100)
y = 0.0012*x+700
plt.plot(x, y, ls='dashed', color='g')
plt.show()

transpose()#
transpose(): ํ๊ณผ ์ด์ ๊ต์ฒดํ๋ค.
๋ฐฐ์ด๋ช .T
๋ ๊ฐ๋ฅํ๋ค.
np.transpose(๋ฐฐ์ด๋ช
)
๋ฐฐ์ด๋ช
.T
ar= np.arange(10).reshape(2,5)
print(ar)
print('\n\n===๊ฒฐ๊ณผ===')
print(ar.T)
[[0 1 2 3 4]
[5 6 7 8 9]]
===๊ฒฐ๊ณผ===
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
๋ฐฐ์ด์ ์ ์ฉํ ํจ์๋คII#
๋ฐฐ์ด์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ ์ฉํ ํจ์๋ฅผ ์ดํด๋ณธ๋ค.
where()
max(), min()
argmax(), argmin()
sum(), mean(), median()
var(), std()
unique()
abs()
sin(), cos()
dot()
where()#
where(): ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ฑฐ๋, ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ ๋ค๋ฅด๊ฒ ์ ์ฉ์ํจ๋ค.
np.where(์กฐ๊ฑด, True์ผ๋ ์ ์ฉ๊ฐ, False์ผ๋ ์ ์ฉ๊ฐ)
a = np.arange(10)
print(a)
print('\n\n===๊ฒฐ๊ณผ===')
print(np.where(a%2==0)) # index ๋ฐํ
print(np.where(a%2==0, "์ง์", "ํ์"))
[0 1 2 3 4 5 6 7 8 9]
===๊ฒฐ๊ณผ===
(array([0, 2, 4, 6, 8], dtype=int64),)
['์ง์' 'ํ์' '์ง์' 'ํ์' '์ง์' 'ํ์' '์ง์' 'ํ์' '์ง์' 'ํ์']
min(), max()#
np.min(): ์ต์๊ฐ์ ๋ฐํํ๋ค.
np.max(): ์ต๋๊ฐ์ ๋ฐํํ๋ค.
# ์ต์๊ฐ, ์ต๋๊ฐ, ์ต์๊ฐ ์ธ๋ฑ์ค, ์ต๋๊ฐ ์ธ๋ฑ์ค
ar = np.random.random((2,2,4))
print(ar)
print('\n\n===๊ฒฐ๊ณผ===')
print(np.min(ar))
print('\n\n===๊ฒฐ๊ณผ===')
print(np.max(ar[:1]))
[[[0.97134378 0.59300883 0.33133678 0.09545665]
[0.42895425 0.15937338 0.77226317 0.70164268]]
[[0.14674544 0.78228871 0.86679713 0.46735498]
[0.51153316 0.47784769 0.39438198 0.93391305]]]
===๊ฒฐ๊ณผ===
0.09545664511442631
===๊ฒฐ๊ณผ===
0.9713437794013683
argmin(), argmax()#
argmin(): ์ต์๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
argmax(): ์ต๋๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
print(np.argmin(ar))
print(np.argmax(ar))
3
0
sum(), mean(), median()#
np.sum(๋ฐฐ์ด๋ช ): ํฉ์ ๋ฐํํ๋ค.
np.mean(๋ฐฐ์ด๋ช ): ํ๊ท ์ ๋ฐํํ๋ค.
np.median(๋ฐฐ์ด๋ช ): ์ค๊ฐ๊ฐ์ ๋ฐํํ๋ค. ์ด ๋ ์ต์ axis๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ ์ถ์ ๋ช ์ํด ์ค ์ ์๋ค.
axis=0: ํ
axis=1: ์ด
ar= np.arange(1,31,2).reshape(3,5)
print(ar)
print(np.sum(ar))
print(np.mean(ar))
print(np.median(ar))
print('\n\n===๊ฒฐ๊ณผ===')
print(np.sum(ar, axis=0))
print(np.sum(ar, axis=1))
[[ 1 3 5 7 9]
[11 13 15 17 19]
[21 23 25 27 29]]
225
15.0
15.0
===๊ฒฐ๊ณผ===
[33 39 45 51 57]
[ 25 75 125]
๐์๋ ๊ฐ๋ค์ ํ๊ท ์ ๋ฐฑ๋ถ์จ๋ก ์์์ 2์๋ฆฌ๊น์ง ๋ํ๋ด์์ค. ์์์ ์ ๊ตฌํ ๋๋ round()ํจ์๋ฅผ ์ฌ์ฉํ์ธ์.
np.array([0.83333333, 0.76404494, 0.85393258, 0.82022472, 0.86516854,0.80898876, 0.80898876, 0.7752809 , 0.84269663, 0.82022472])
๋ฐ์ดํฐ.round(n): ๋ฐ์ดํฐ๋ฅผ ์์์ n์๋ฆฌ๊น์ง ๋ํ๋ธ๋ค.
np.round(๋ฐ์ดํฐ,n): ๋ฐ์ดํฐ๋ฅผ ์์์ n์๋ฆฌ๊น์ง ๋ํ๋ธ๋ค.
var(), std()#
np.var(): ๋ถ์ฐ์ ๊ตฌํ๋ค.
np.std(): ํ์คํธ์ฐจ๋ฅผ ๊ตฌํ๋ค.
ar=np.random.uniform(1,100,80)
print(ar)
print('\n\n===๊ฒฐ๊ณผ===')
print(np.var(ar))
print(np.std(ar))
[37.87367256 95.57921192 67.97010564 19.96690208 27.03711938 31.13748177
90.73747583 52.78923875 43.65836812 4.11530984 91.64686995 79.89426078
47.70449346 31.27205486 90.49977271 9.27020268 75.50297804 79.1593499
35.22116205 27.80194482 82.13742242 85.51941682 79.13205069 6.48176132
80.61598849 37.0085037 20.05461974 21.75780092 31.43534862 61.04298366
35.01084486 73.72041682 58.41674982 48.00889281 21.89152992 43.12365312
34.44607878 52.38628156 50.25919796 79.13117993 22.93134591 73.45811207
39.98478153 81.10923339 31.36573676 66.72957047 18.13790858 54.68927856
26.08646054 13.45429508 45.92059546 61.83042801 50.80523382 39.4264743
52.6466209 94.98424372 69.49914617 1.00650245 36.82993843 48.9215045
50.97919313 74.59960312 51.94649795 85.16046968 98.20186881 50.30919833
49.53565261 87.62427459 13.50010977 38.16971008 65.21338628 37.37042678
21.94086514 24.76882382 97.81804992 33.15547873 51.86591978 40.89663786
85.85970676 65.2792522 ]
===๊ฒฐ๊ณผ===
648.1896674529219
25.459569270765794
unique()#
np.unique(): ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ์ฌ 1์ฐจ์์ผ๋ก ๋ฐํํ๋ค.
ar = np.random.randint(-10, 10, (2,5))
print(ar)
print('\n\n===๊ฒฐ๊ณผ===')
print(np.unique(ar))
[[-3 0 0 -6 1]
[-3 1 2 -3 -8]]
===๊ฒฐ๊ณผ===
[-8 -6 -3 0 1 2]
abs()#
np.abs(): ์ ๋๊ฐ์ ๊ตฌํ๋ค.
ar = np.random.randint(-10, 10, (2,5))
print(ar)
print('\n\n===๊ฒฐ๊ณผ===')
print(np.abs(ar))
[[ -6 9 5 -10 -5]
[ 1 -3 4 -10 -3]]
===๊ฒฐ๊ณผ===
[[ 6 9 5 10 5]
[ 1 3 4 10 3]]
sin(), cos()#
np.sin(): sin ๊ฐ์ ๊ตฌํ๋ค.
np.cos(): cos ๊ฐ์ ๊ตฌํ๋ค.
์๋๋ sin() ํจ์์ cos() ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ฆฐ ๋ค์ค๊ทธ๋ํ์ด๋ค.
x = np.arange(0, 10, 0.1)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

dot()#
np.dot(a, b): ํ๋ ฌ์ ๊ณฑ(๋ด์ )์ ๊ตฌํ๋ค.
a@b์ ๊ฐ์ด
@
๊ธฐํธ๋ก ๋ํ๋ด๊ธฐ๋ ํ๋ค.
๋ ํ๋ ฌ A์ ์ด์ ๊ฐ์์ ํ๋ ฌ B์ ํ์ ๊ฐ์๊ฐ ๊ฐ์ ๋ ํ๋ ฌ A์ ์ iํ์ ๊ฐ ์์์ ํ๋ ฌ B์ ์ j์ด์ ๊ฐ ์์๋ฅผ ๊ทธ ์์๋๋ก ๊ณฑํ์ฌ ๋ํ ๊ฒ์ (i,j)์์๋ก ํ๋ ํ๋ ฌ์ ๋ ํ๋ ฌ A์ B์ ๊ณฑ์ด๋ผ๊ณ ํ๋ค.
===a===
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
===b===
[[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
[[1*3 + 2*5 + 3*7 + 4*9 + 5*11],
[1*4 + 2*6 + 3*8 + 4*10 + 5*12]
[6*3 + 7*5 + 8*7 + 9*9 +10*11],
[6*4 + 7*6 + 8*8 + 9*10 + 10*12]]
a = np.arange(1,11,1).reshape(2,5)
b = np.arange(3,13,1).reshape(5,2)
print('===a===')
print(a)
print('\n\n===b===')
print(b)
print('\n\n===๊ฒฐ๊ณผ===')
print(a@b)
===a===
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
===b===
[[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
===๊ฒฐ๊ณผ===
[[125 140]
[300 340]]

ํ์ผ์ ์ฅ savetxt() , ์ฝ์ด์ค๊ธฐ loadtxt#
np.savetxt(ํ์ผ๋ช , ๋ฐฐ์ด๋ช ): ๋ฐฐ์ด์ ํ ์คํธ ํ์ผ๋ก ์ ์ฅํ๋ค.
np.loadtxt(ํ์ผ๋ช ): ํ์ผ์ ๋ฐฐ์ด๋ก ๋ถ๋ฌ์จ๋ค.
np.savetxt('File123.txt', ar)
ar=np.loadtxt('File123.txt')
print(ar)
Shallow Copy vs. Deep Copy#
๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ, ์งํฉ, ๋ฐฐ์ด ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ ๋ณต์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ํ๊ธฐ๋ฅผ ์ํ ๋๊ฐ ์๋ค. ์ด๋ค์ ๋ชจ๋ mutable ๋ฐ์ดํฐํ์ ์ด๊ณ , ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ๋์ ๋ฌธ์ ์ ๊ณผ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์๋ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
์ผ๋ฐ๋ณต์ฌ: ์์กฐ๋ณ์์ ๋ณต์ฌ๋ณ์๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ
Shallow Copy : ์์กฐ๋ณ์์ ๋ณต์ฌ๋ณ์๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ 2์ฐจ์ ์ด์์ธ ๊ฒฝ์ฐ ๋์ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ
Deep Copy : ๋ณต์ฌ๋ณ์๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ
์ผ๋ฐ๋ณต์ฌ#
cp_a = a
์ ๊ฐ์ ๋ณต์ฌํ ์ ์๋ค.๊ทธ๋ฌ๋ ์ด์ ๊ฐ์ ๋ณต์ฌ์ ๋ฌธ์ ๋ ๋ณต์ฌ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ํ๋ฉด ์์กฐ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ ๋๊ฐ์ด ์์ ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ ์ด์ ๋ ๋ณต์ฌ๋ณ์์ ์์กฐ๋ณ์๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ด๋ค.

๋ค์ ์ฝ๋๋ฅผ ํตํด ํ์ธํด๋ณด์.
๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ, ์งํฉ, ๋ฐฐ์ด ๊ฐ๊ฐ์ ๋ณ์ a, b, c, d๋ฅผ ์ ์ํ์๋ค.
a=[1,2,3,[10,20,30]] #๋ฆฌ์คํธ
b={'a':1, 'b':2, 'c':[10,20,30]} #๋์
๋๋ฆฌ
c={1,2,3,(10,20,30)} # ์งํฉ
d=np.array([[1,2,3],[10,20,30]])
print('Origin Data===================')
print(f'๋ฆฌ์คํธ: {a}')
print(f'๋์
๋๋ฆฌ: {b}')
print(f'์งํฉ: {c}')
print(f'๋ฐฐ์ด: {d}')
Origin Data===================
๋ฆฌ์คํธ: [1, 2, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 2, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 2 3]
[10 20 30]]
์์์ ์ ์ํ ๋ณ์ a, b, c, d๋ฅผ ๋ณ์ a1, b1, c1,d1์ ๊ฐ๊ฐ ๋ณต์ฌํ์๋ค.
a1=a
b1=b
c1=c
d1=d
print('Copy Data=============')
print(f'๋ฆฌ์คํธ: {a1}')
print(f'๋์
๋๋ฆฌ: {b1}')
print(f'์งํฉ: {c1}')
print(f'๋ฐฐ์ด: {d1}')
Copy Data=============
๋ฆฌ์คํธ: [1, 2, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 2, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 2 3]
[10 20 30]]
๋ณต์ฌํ ๋ณ์ a1, b1, c1, d1์ ๊ฐ์ ์ผ๋ถ๋ฅผ ์์ ํ์๋ค.
a1[1]=100
b1['b']=100
c1.update((5,6,7))
d1[0][1]=100
์์กฐ๋ณ์ a, b, c, d์ ๋ณต์ฌ๋ณ์ a1, b1, c1, d1์ ์ถ๋ ฅํด๋ณด๋ฉด,
์์กฐ๋ณ์์ ๊ฐ๊น์ง ์์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
print('Copy Data ์์ ํ origin data=============')
print(f'๋ฆฌ์คํธ: {a}')
print(f'๋์
๋๋ฆฌ: {b}')
print(f'์งํฉ: {c}')
print(f'๋ฐฐ์ด: {d}')
print('\nCopy Data ์์ ํ copy data=============')
print(f'๋ฆฌ์คํธ: {a1}')
print(f'๋์
๋๋ฆฌ: {b1}')
print(f'์งํฉ: {c1}')
print(f'๋ฐฐ์ด: {d1}')
Copy Data ์์ ํ origin data=============
๋ฆฌ์คํธ: [1, 100, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 100, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, 5, 6, 7, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 100 3]
[ 10 20 30]]
Copy Data ์์ ํ copy data=============
๋ฆฌ์คํธ: [1, 100, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 100, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, 5, 6, 7, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 100 3]
[ 10 20 30]]
์์กฐ๋ณ์์ ๋ณต์ฌ๋ณ์์ ID๊ฐ ๋์ผํ์ง ์์๋ณด๊ธฐ ์ํด is ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํด๋ณผ ์ ์๋ค.
is ์ฐ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ฆ ๊ฐ์ฒด์ ID๊ฐ ๋์ผํ์ง ํ์ธํ๋ ์ฐ์ฐ์์ด๋ค.
๊ฐ์ด ๋์ผํ์ง ํ์ธํ๋ ๊ฒ์
==
๋ฅผ ์ฌ์ฉํ๊ณ , ID๊ฐ ๋์ผํ์ง ํ์ธํ๊ธฐ ์ํด์๋ is ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
print(a is a1)
print(b is b1)
print(c is c1)
print(d is d1)
True
True
True
True
copy() ๋ฉ์๋(shallow copy)#
์์กฐ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ copy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ณด์.
๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ, ์งํฉ, ๋ฐฐ์ด ๊ฐ๊ฐ์ ๋ณ์ a, b, c, d๋ฅผ ์ ์ํ์๋ค.
a=[1,2,3,[10,20,30]] #๋ฆฌ์คํธ
b={'a':1, 'b':2, 'c':[10,20,30]} #๋์
๋๋ฆฌ
c={1,2,3,(10,20,30)} # ์งํฉ
d=np.array([[1,2,3],[10,20,30]])
print('Origin Data===================')
print(f'๋ฆฌ์คํธ: {a}')
print(f'๋์
๋๋ฆฌ: {b}')
print(f'์งํฉ: {c}')
print(f'๋ฐฐ์ด: {d}')
Origin Data===================
๋ฆฌ์คํธ: [1, 2, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 2, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 2 3]
[10 20 30]]
์ด๋ฒ์๋ copy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌํ์๋ค.
a1=a.copy()
b1=b.copy()
c1=c.copy()
d1=d.copy()
print('Copy Data=============')
print(f'๋ฆฌ์คํธ: {a1}')
print(f'๋์
๋๋ฆฌ: {b1}')
print(f'์งํฉ: {c1}')
print(f'๋ฐฐ์ด: {d1}')
Copy Data=============
๋ฆฌ์คํธ: [1, 2, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 2, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 2 3]
[10 20 30]]
๋ณต์ฌํ ๋ณ์ a1, b1, c1, d1์ ๊ฐ์ ์ผ๋ถ๋ฅผ ์์ ํ์๋ค.
a1[1]=100
b1['b']=100
c1.update((5,6,7))
d1[0][1]=100
์์กฐ๋ณ์ a, b, c, d์ ๋ณต์ฌ๋ณ์ a1, b1, c1, d1์ ์ถ๋ ฅํด๋ณด๋ฉด, ์์กฐ๋ณ์์ ๊ฐ์ ๊ทธ๋๋ก ์ ์ง๋๊ณ , ๋ณต์ฌ๋ณ์์ ๊ฐ๋ง ์์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
print('Copy Data ์์ ํ origin data=============')
print(f'๋ฆฌ์คํธ: {a}')
print(f'๋์
๋๋ฆฌ: {b}')
print(f'์งํฉ: {c}')
print(f'๋ฐฐ์ด: {d}')
print('\nCopy Data ์์ ํ copy data=============')
print(f'๋ฆฌ์คํธ: {a1}')
print(f'๋์
๋๋ฆฌ: {b1}')
print(f'์งํฉ: {c1}')
print(f'๋ฐฐ์ด: {d1}')
Copy Data ์์ ํ origin data=============
๋ฆฌ์คํธ: [1, 2, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 2, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 2 3]
[10 20 30]]
Copy Data ์์ ํ copy data=============
๋ฆฌ์คํธ: [1, 100, 3, [10, 20, 30]]
๋์
๋๋ฆฌ: {'a': 1, 'b': 100, 'c': [10, 20, 30]}
์งํฉ: {1, 2, 3, 5, 6, 7, (10, 20, 30)}
๋ฐฐ์ด: [[ 1 100 3]
[ 10 20 30]]
๋ํ ์์กฐ๋ณ์ a, b, c, d์ ๋ณต์ฌ๋ณ์ a1, b1, c1, d1๊ฐ ์๋ก ๋ค๋ฅธ ID๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
print(a is a1)
print(b is b1)
print(c is c1)
print(d is d1)
False
False
False
False
ํ์ง๋ง ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๋ฆฌ์คํธ์์ ๋ฆฌ์คํธ์ด๊ฑฐ๋, ๋์ ๋๋ฆฌ์์ ๋ฆฌ์คํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์์ ํ์ ๋ ์ฌ์ ํ ์์กฐ๋ณ์์ ๊ฐ์ด ๊ฐ์ด ์์ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
a=[1,2,3,[10,20,30]]
b={'a':1, 'b':2, 'c':[10,20,30]}
c=np.array([{'a':[1,2]},{'b':[1,2]},{'c':[1,2]}])
a[3]์ ๊ฐ์ด [10,20,30]๋ฆฌ์คํธ์ด๋ค.
b[โcโ]์ ๊ฐ์ด [10,20,30]๋ฆฌ์คํธ์ด๋ค.
c์ ๊ฐ ๊ฐ๋ค์ด ๋ฆฌ์คํธ์ด๋ค.
a=[1,2,3,[10,20,30]]
b={'a':1, 'b':2, 'c':[10,20,30]}
c=np.array([{'a':[1,2]},{'b':[1,2]},{'c':[1,2]}])
a1=a.copy()
b1=b.copy()
c1=c.copy()
a1[3][0]='here'
b1['c'][0]='here'
c1[0]['a'][0]=100

์๋ณธ ๋ฐ์ดํฐ์ ๋ณต์ฌ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
print(a, a1)
print(b, b1)
print(c, c1)
[1, 2, 3, ['here', 20, 30]]
[1, 2, 3, ['here', 20, 30]]
{'a': 1, 'b': 2, 'c': ['here', 20, 30]} {'a': 1, 'b': 2, 'c': ['here', 20, 30]}
[{'a': [100, 2]} {'b': [1, 2]} {'c': [1, 2]}] [{'a': [100, 2]} {'b': [1, 2]} {'c': [1, 2]}]
Deepcopy()#
Deep copy๋ ๋ณต์ฌ๋ณ์์ ๊ฐ์ ์์ (์์ , ์ญ์ , ์ถ๊ฐ ๋ฑ)ํด๋ ์๋ณธ๋ณ์์ ๊ฐ์ด ์์ ๋์ง ์๋๋ค.
import copy
a=[1,2,3,[10,20,30]]
b=copy.deepcopy(a)
b[3][0] = 100
print(a)
print(b)
[1, 2, 3, [10, 20, 30]]
[1, 2, 3, [100, 20, 30]]
๋ง๋ฌด๋ฆฌ#
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋์๋ ์ด๋ ํ ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํ ๊ฒ์ธ์ง๋ฅผ ๋จผ์ ์๊ฐํด์ผ ํ๋ค.
์๋ฃ๊ตฌ์กฐ์๋ ๋ฐ์ดํฐ์ ์์ , ์ฝ์ , ์ถ๊ฐ, ์ญ์ ๊ฐ ์์ ๋ก์ด ๊ฐ๋ณ ๋ฐ์ดํฐ ํ์ ๊ณผ ํ๋ฒ ๋ง๋ค๊ณ ๋๋ฉด ์์ , ์ฝ์ , ์ถ๊ฐ, ์ญ์ ํ ์ ์๋ ๋ถ๋ณ ๋ฐ์ดํฐ ํ์ ์ด ์๋ค.
๋ชจ๋ numpy๋ ๊ท๋ชจ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
numpy ๋ชจ๋์ ๋ฐฐ์ด(array)๊ณผ ๋ฆฌ์คํธ๋ ๋ฒกํฐ์ฐ์ฐ ์ ๊ณต ์ฌ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋ ์ธก๋ฉด์์ ๋ง์ ์ฐจ์ด๊ฐ ์๋ค.
shallow copy(์์ ๋ณต์ฌ)์ deep copy(๊น์ ๋ณต์ฌ)์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผ ํ๋ค.