์ ์ ๋ฐฐ์ด ์ธ๋ฑ์ฑ
๋ฐฐ์ด์์ ํ๋์ ๋จ์ผํ ์์๋ฅผ ์์ธ์ค ํ ๊ฒฝ์ฐ tuple๋ก ์ธ๋ฑ์ฑ
์ด๊ฒ์ ๋ชฉ์ ์ ๋ฐฐ์ด์ ์ ์ฅ๋ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ํ๊บผ๋ฒ์ ๋ฝ์๋ด์ ๋ ๋ค๋ฅธ ํ๋์ ๋ฐฐ์ด์ ์์ฑํ๋ ค๋ ๊ฒ์ด๋ค.
์ฌ๋ผ์ด์ฑ์ ํ๋ฉด ์๋ณธ ๋ฐฐ์ด์ ์ฐ์์ ์ธ ๋ฐฐ์ด์ด๊ฑฐ๋, ํน์ ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ์ ์๋ผ๋ธ ํํ์ง๋ง,
์ ์ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋ถ๊ท์น์ ์ผ๋ก ์๋ณธ ๋ฐฐ์ด์ ์ผ๋ถ๋ฅผ ๋ฝ์ ์ ์๋ค.
*์ฌ๋ผ์ด์ฑ์ ๋จ์ง ์๋ณธ ๋ฐฐ์ด์ ๋ํ ์๋ก์ด View๋ฅผ ์์ฑํ๋๊ฒ์ ์ง๋์ง ์์ง๋ง, ์ ์๋ฐฐ์ด ์ธ๋ฑ์ฑ์ ์๋ก์ด ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
1์ฐจ์ ๋ฐฐ์ด์ ๋ํ ์ ์ ๋ฐฐ์ด ์ธ๋ฑ์ฑ
์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋ ๋ฐฐ์ด์ ๊ฐ ๊ฐ์ ๊ทธ ์๋ฆฌ์ ์ฌ ์๋ ๋ฐฐ์ด์ ๊ฐ์ ์์น๋ฅผ ํ์ํ๋ค.
x = np.arange(10, 1, -1)
print(x) #[10 9 8 7 6 5 4 3 2]
print(x[np.array([3, 3, 1, 8])])
#[7 7 9 2]
print(x[[3, 3, 1, 8]]) #๋ฆฌ์คํธ๋ ๋ฐฐ์ด๋ก ์๋ฌต์ ์ผ๋ก ๋ณํ๊ฐ๋ฅํ๋ค. ์ฆ ๋์ผํ๋ค.
#[7 7 9 2]
print(x[np.array([3, 3, -3, 8])])
#[7 7 4 2]
๋น์ฐํ๊ฒ ์ง๋ง ์์ ์ธ๋ฑ์ค๋ ๊ฐ๋ฅํ๋ค.
print(x[np.array([[1, 1], [2, 3]])])
#[[9 9]
#[8 7]]
1์ฐจ์ ๋ฐฐ์ด์ ๋ค์ฐจ์ ๋ฐฐ์ด๋ก ์ธ๋ฑ์ฑํ ์๋ ์๋ค. ๋ฆฌํด๋๋ ๊ฒฐ๊ณผ๋ ํญ์ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ๋์ผํ shape์ ๋ฐฐ์ด์ด๊ณ ,
๊ฐ์ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ํด์ ์ง์ ํ ๊ฐ๋ค์ด๋ค.
๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ํ ์ ์ ๋ฐฐ์ด ์ธ๋ฑ์ฑ
y = np.arange(35).reshape(5, 7)
print(y)
#[[ 0 1 2 3 4 5 6]
#[ 7 8 9 10 11 12 13]
#[14 15 16 17 18 19 20]
#[21 22 23 24 25 26 27]
#[28 29 30 31 32 33 34]]
#1
print(y[np.array([0, 2, 4]), np.array([0, 1, 2])])
#print(y[[0, 2, 4], [0, 1, 2]])
#[ 0 15 30]
#2
print(y[np.array([[0, 1], [2, 3]]), np.array([[4, 5], [2, 3]])])
#[[ 4 12]
#[16 24]]
๋ค์ฐจ์ ๋ฐฐ์ด์ด ๋ฐฐ์ด๋ก ์ธ๋ฑ์ฑ ๋ ๊ฒฝ์ฐ์๋ ๊ท์น์ด ์ข๋ ๋ณต์กํด์ง๋ค.
์ฐ์ ๊ฐ๋จํ ๊ฒฝ์ฐ๋ rank๊ฐ์ ์ธ๋ฑ์ค ๋ฐฐ์ด๋ก ์ ๊ณต๋๊ณ , ๋ชจ๋ ์ธ๋ฑ์ค ๋ฐฐ์ด๋ค์ด ๋์ผํ shape์ ๊ฐ์ง๋ ๊ฒฝ์ฐ์ด๋ค.
์ด ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ๋์ผํ shape๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ , ๋ฐฐ์ด์ ๊ฐ์ ๊ฐ๊ฐ์ ์ฐจ์์ ๋ํด ๊ทธ ์ฐจ์์ ๋์ํ๋ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ๊ฐ์ ์ธ๋ฑ์ค๋ก
ํ๋ ๊ฐ์ด๋ค.
์ฐธ๊ณ
#1 -> 0ํ 0์ด / 2ํ 1์ด / 4ํ 2์ด
#2 -> 0ํ 4์ด / 1ํ 5์ด / 2ํ 2์ด / 3ํ 3์ด
์ธ๋ฑ์ค ๋ฐฐ์ด๋ค์ด ์๋ก ๋์ผํ shape์ด ์๋ ๊ฒฝ์ฐ์๋ ๋์ผํ shape์ผ๋ก ๋ง๋ค๊ธฐ ์ํด broadcast๋ฅผ ์๋ํ๋๋ฐ...
์์ง ๋ฐฐ์ฐ์ง ์์์ผ๋ฏ๋ก ์๋ตํ๋ค.
์๋ ๋ฐฐ์ด์ rank๋ณด๋ค ์ ์ ๊ฐ์์ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ฑํ ์๋ ์๋ค.
print(y[np.array([0, 1, 4])])
#[[ 0 1 2 3 4 5 6]
#[ 7 8 9 10 11 12 13]
#[28 29 30 31 32 33 34]]
์ด ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์๋ ๊ฐ์ ํด๋นํ๋ ํ๋ค์ ์ ํํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฐํํ๋ค.
๋ถ๋ฆฌ์ธ ๋ฐฐ์ด ์ธ๋ฑ์ฑ(Boolean array indexing)
๋ถ๋ฆฌ์ธ ๋ฐฐ์ด ์ธ๋ฑ์ฑ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ ํ๋ ์์๋ง ์ ํํ๊ณ ์ ํ ๋ ์์ฃผ ์ฌ์ฉํ๋ค.
a = np.array([[1, 2],
[3, 4],
[5, 6]])
bool_idx = (a > 2)
print(a[bool_idx])
#[3 4 5 6]
print(a[a > 2])
#[3 4 5 6]
์ ์ฝ๋์ ์๋ ์ฝ๋๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ธ๋ค.
'๊ฐ๋ฐ ํ์์บก์ > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Matplotlib ๊ธฐ์ด ์ ๋ฆฌ (0) | 2020.09.20 |
---|---|
[Python] Numpy - ๋ฐฐ์ด ์ฐ์ฐ(Array math), ๋ธ๋ก๋์บ์คํ (Broadcasting) (0) | 2020.09.19 |
[Python] Numpy - ๋ฐฐ์ด ํฉ์น๊ธฐ (0) | 2020.09.19 |
[Python] Numpy - ๋ฐฐ์ด ์ฌ๋ผ์ด์ฑ(slicing) (0) | 2020.09.18 |
[Python] Numpy - ๋ฐฐ์ด reshape (0) | 2020.09.18 |