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()
_images/4fe905c294b2ed31b874ada13f531d210b9f6cf1b17c43e7edd34b2c84db7b33.png
  • 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()
_images/b1ecc1417f80568e03192126b2b7778dfdc4017a44f92c173927850c494f3d3d.png

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()
_images/4e826b65dd43bfec2d72b51bcd937cda4ec57ab87e86008d8118c102a9d6d93d.png

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(๊นŠ์€ ๋ณต์‚ฌ)์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.