import numpy as np
a = np.arange(10) + 1j* np.arange(10)
a
# array([0.+0.j, 1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j, 5.+5.j, 6.+6.j, 7.+7.j,
# 8.+8.j, 9.+9.j])
a / 2
# array([0. +0.j , 0.5+0.5j, 1. +1.j , 1.5+1.5j, 2. +2.j , 2.5+2.5j,
# 3. +3.j , 3.5+3.5j, 4. +4.j , 4.5+4.5j])
a // 2
# array([0.+0.j, 0.+0.j, 1.+0.j, 1.+0.j, 2.+0.j, 2.+0.j, 3.+0.j, 3.+0.j,
# 4.+0.j, 4.+0.j])
์ด ๋์์ ๋ํ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น? ์์์ ๋ณต์กํ ๋ถ๋ถ์ floor_divide ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์ค๋ฅ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ๊ฐ์ ๋ถ๋ถ๋ ์์ค๋์ง ์์ต๋๋ค.
1.16.1
3.6.7 (๊ธฐ๋ณธ๊ฐ, 2018 ๋
10 ์ 22 ์ผ, 11:32:17)
[GCC 8.2.0]
๋ณต์์์ ๋ํด์๋ ๋ฐ๋ฅ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ณต์์์ ๋ฐ๋ฅ
๋ํ ํ์ ๋ถ์ ๋ณต์ ๋ถ๋ฅผ ๋ฐ๋ก ๋๋์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ 2 ๊ฐ์ ๋ณต์์๋ฅผ ๋๋ ๋ ํ๋์ ๋ณต์์๋ฅผ ์ป์ต๋๋ค. ( ๋ณต์์ ๋๋๊ธฐ )
๋ํ,
`>>> (1. + 1.j) // 2
์ญ ์ถ์ (๊ฐ์ฅ ์ต๊ทผ ํธ์ถ ๋ง์ง๋ง) :
ํ์ผ "
์ ํ ์ค๋ฅ : ๋ณต์์์ ๋ฐ๋ฅ์ ์ฐจ์งํ ์ ์์ต๋๋ค .`
์ ์ฌํ๊ฒ TypeError ํ์๋์ด์ผํฉ๋๋ค.
์ ๋ ์คํ ์์ค๋ฅผ ์ฒ์ ์ฌ์ฉํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ํ๊ณ ์ถ๋ค. ๋๊ตฐ๊ฐ ๋๋ฅผ ์๋ด ํ ์ ์์ต๋๊น?
Numpy๋ ๋ณต์์์ ๋ฐ๋ฅ์ ์ฐจ์งํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ์ฃผ๋ ๋์ ํ์ ๋ถ๋ถ ๋ง ๋จ์ด ๋จ๋ฆฝ๋๋ค.
์ข์, ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ๋ถ๋ถ์ด ์ญ์ ๋๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ์ต์ํ ๋์ง ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ ์์ ์ธ ํ์ด์ฌ์ ์ค๋ฅ๋ฅผ ๋์ง๋๋ค. ๋๊ตฐ๊ฐ ์ ์ค ์ผ์ด์ค๋ฅผ ์๊ฐํ ์ ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์๋ง๋ ๋ฐ๋ผ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์, TypeError๋ฅผ ๋์ ธ์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์
ํ ์ ์์ต๋๊น?
๊ฐ์ธ์ ์ผ๋ก ๋๋ (2 + 2j) // 2 = (1 + 1j)๋ฅผ ์ ํธํ์ง๋ง ์ํ์ ์ผ๋ก ์๋ฒฝํ์ง๋ ์์ต๋๋ค.
๋ฌด์์ด ์ต์ ์ธ์ง ํ์คํ์ง ์๊ณ ๋๋จธ์ง๋ ๋จ์ํ ๋ณต์กํ๊ฒ ๊ตฌํ๋์ง ์์ต๋๋ค (์ค๋ฅ ๋ฐ์). ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋จผ์ ๋น๋์ํด์ผํฉ๋๋ค.
๋ฌผ๋ก ๊ทธ๊ฒ์ ๋ํด ์์ ํ ์ ์์ต๋๋ค. ufunc๊ฐ ์๋ํ๊ณ ์์ฑ๋๋ ๋ฐฉ์์ ๋ํด ์กฐ๊ธ ๋ ๊น์ด ๋ค์ด๊ฐ์ผํ๋ฏ๋ก ์ฌ์ํ์ง ์์ ์ ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ๊ฐ๊ณ ์ถ์ ๊ณณ์ ๋ํ ๋ ผ์๊ฐ ์ฌ์ ํ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋๋ ๋น์ ์ ๋ง์ ํ์๋ ์์ต๋๋ค.
"๋ชจํธํจ์๋ ๋ถ๊ตฌํ๊ณ ์ถ์ธกํ๋ ค๋ ์ ํน์ ๊ฑฐ๋ถํ์ญ์์ค." TypeError
์ด์ด์ผํ๋ค๊ณ ์ ์ํฉ๋๋ค.
@ kaivu1999- ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด floor_divide
ufunc์์ ์์ฑ๋๋ ๋ณต์กํ ์ ํ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค ( divmod
, remainder
๋ฐ modf
๋ ์ด๋ฏธ ๊ด์ฐฎ์ต๋๋ค). core/src/umath/loops.c.src
์์ 2321 ํ ๋ค์์ ๋์ค๋ ํญ๋ชฉ์๋ณด์ญ์์ค (2480--2500 ํ์ ์ ๊ฑฐ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค).
@mhvk ์, numpy/core/code_generators/generate_umath.py
์ ์กฐ์ ํด์ผํฉ๋๋ค.ํ์ง๋ง ๋จผ์ ์ง์์ ์ค๋จํ๋ ค๋ฉด ์ฌ์ฉ์ ์ ์ ์ ํ ํด์๊ธฐ๋ฅผ ๋ง๋ค์ด์ผํฉ๋๋ค (์ถ๊ฐ์ ์ผ๋ก numpy/core/src/umath/ufunc_type_resolution.c
ํฐ์น).
@seberg- ํ์ฌ ๋์์ ์ค์ ๋ก ๋ฒ๊ทธ๋ก ๊ฐ์ฃผ๋์ด์ผํ๋ฉฐ remainder
๋ฐ divmod
์์ ์ผ๊ด์ฑ์ ์ํด ์ค๋ฅ ๋ฐ์์ ์์ํด์ผํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ํ๋์ ์ํ๋์ง ์ฌ๋ถ๋ ๋ณ๋์ ๋ ผ์๋ก ๋ณด์ผ ๊ฒ์ ๋๋ค.
๊ทธ๋, ๋ด๊ฐํ๊ณ ์์ด.
์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋๋ฐ ์ด์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
`>>> a // 2
์ญ ์ถ์ (๊ฐ์ฅ ์ต๊ทผ ํธ์ถ ๋ง์ง๋ง) :
ํ์ผ "
TypeError : ufunc 'floor_divide'๋ ์
๋ ฅ ์ ํ์ ๋ํด ์ง์๋์ง ์์ผ๋ฉฐ ์
๋ ฅ์ ''safe ''์บ์คํ
๊ท์น์ ๋ฐ๋ผ ์ง์๋๋ ์ ํ์ผ๋ก ์์ ํ๊ฒ ๊ฐ์ ๋ณํ ๋ ์ ์์ต๋๋ค.
`
ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ ๊น์?
@ kaivu1999 ํ ์์ฒญ์ ์ข์ ์์์ด ๋ ๊ฒ์
๋๋ค. ์ฒซ ๋ฒ์งธ ์๊ฒฌ์ Fixes #13236
๋ฅผ ๋ฃ์ด ์ฃผ์๋ฉด ๋ฌธ์ ์ PR์ ์ํธ ์ฐธ์กฐ ํ ๊ฒ์
๋๋ค.
๊ฐ์ฐ์ค ์ ์๊ฐ ๊ฒฐ๊ณผ๋ผ๋ ๊ฒ์ ๋ฌธ์ํํ๋ฉด ์ค์ ๋ถ๋ถ๊ณผ ํ์ ๋ถ๋ถ ๋ชจ๋์์ ๋ฐ๋ฅ ๋๋๊ธฐ๋ฅผ ์ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ทธ๋๋ ํ์ด์ฌ๊ณผ ์ผ์นํ์ง ์์ ๊ฒ์ ๋๋ค.