NumPy์ fancy indexing ๋๋ advanced indexing์ ๋ฐฐ์ด์์ ๋จ์ผ ๊ฐ์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ๋์์ ์ ํํ๊ฑฐ๋ ์กฐ์ํ ์ ์๋ ๊ฐ๋ ฅํ ์ธ๋ฑ์ฑ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ์ธ๋ฑ์ฑ(์ ์ ์ธ๋ฑ์ฑ์ด๋ ์ฌ๋ผ์ด์ฑ)๊ณผ ๋ฌ๋ฆฌ, fancy indexing์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๋ก ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ์ฌ ์ํ๋ ์์น์ ์ฌ๋ฌ ๊ฐ์ ํ ๋ฒ์ ์ ํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ์ ์ฐํ๊ณ , ๋ณต์กํ ๋ฐฐ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ธ๋ฑ์ฑ์ ๋จ์ผ ์ธ๋ฑ์ค ๋๋ ์ฌ๋ผ์ด์ค๋ก ๋ฐฐ์ด์ ์์๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
arr = np.array([10, 20, 30, 40, 50])
print(arr[2]) # ๊ฒฐ๊ณผ: 30 (๋จ์ผ ์ธ๋ฑ์ค)
print(arr[1:3]) # ๊ฒฐ๊ณผ: [20 30] (์ฌ๋ผ์ด์ค)
ํ์ง๋ง fancy indexing์์๋ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๋ก ๋ณต์์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ ์ ๋ฐฐ์ด๋ก ์ธ๋ฑ์ฑ
์์:
arr = np.array([10, 20, 30, 40, 50])
indices = [1, 3, 4]
print(arr[indices]) # ๊ฒฐ๊ณผ: [20 40 50]
2์ฐจ์ ๋ฐฐ์ด์์๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
row_indices์ col_indices์ ๊ธธ์ด๋ ๊ฐ์์ผ ํ๋ค.
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
row_indices = [0, 2]
col_indices = [1, 2]
print(arr2d[row_indices, col_indices]) # ๊ฒฐ๊ณผ: [2 9]
์ฌ๊ธฐ์ arr2d[0, 1]
์ 2
, arr2d[2, 2]
๋ 9
์ด๋ฏ๋ก [2, 9]
๋ฅผ ๋ฐํํฉ๋๋ค.
๋ถ๋ฆฌ์ธ ๋ง์คํฌ ๋ฐฐ์ด๋ก ์ธ๋ฑ์ฑ
์์:
arr = np.array([1, 2, 3, 4, 5])
mask = arr > 3 # ์กฐ๊ฑด ์์ฑ: [False, False, False, True, True]
print(arr[mask]) # ๊ฒฐ๊ณผ: [4 5]
๋ค์ฐจ์ ๋ฐฐ์ด์์์ fancy indexing
์์:
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
row_indices = [0, 1, 2]
col_indices = [2, 1, 0]
print(arr2d[row_indices, col_indices]) # ๊ฒฐ๊ณผ: [3 5 7]
์ฌ๊ธฐ์ arr2d[0, 2]
๋ 3
, arr2d[1, 1]
์ 5
, arr2d[2, 0]
์ 7
์
๋๋ค.
์์:
arr = np.array([10, 20, 30, 40, 50])
fancy_result = arr[[1, 3]]
fancy_result[0] = 100
print(arr) # ๊ฒฐ๊ณผ: [10 20 30 40 50] (์๋ณธ ๋ฐฐ์ด์ ์์ ๋์ง ์์)
Fancy indexing์ ์ด์ฉํด ์ ํํ ๊ฐ๋ค์ ์์ ํ ์ ์์ต๋๋ค.
arr = np.array([10, 20, 30, 40, 50])
arr[[1, 3, 4]] = 99 # 1, 3, 4 ๋ฒ์งธ ์์๋ฅผ 99๋ก ๋ณ๊ฒฝ
print(arr) # ๊ฒฐ๊ณผ: [10 99 30 99 99]
NumPy์ fancy indexing์ ๋งค์ฐ ์ ์ฐํ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด์ ์ฌ๋ฌ ์์๋ฅผ ๋์์ ์ ํํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ณต์กํ ๋ฐฐ์ด์์ ํน์ ํจํด์ ๋ฐ๋ผ ๊ฐ์ ์ถ์ถํ๊ฑฐ๋ ์กฐ์ํด์ผ ํ ๋ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค.