Numpy: np.floor_divide๊ฐ€ ๊ฐ€์ƒ ๋ถ€๋ถ„์„ ์กฐ์šฉํžˆ ๋–จ์–ด ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 04์›” 01์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

์žฌํ˜„ ์ฝ”๋“œ ์˜ˆ :

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 ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์—๋Ÿฌ ๋ฉ”์‹œ์ง€:

์˜ค๋ฅ˜๋‚˜ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ€์ƒ ๋ถ€๋ถ„๋„ ์†์‹ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Numpy / Python ๋ฒ„์ „ ์ •๋ณด :

1.16.1
3.6.7 (๊ธฐ๋ณธ๊ฐ’, 2018 ๋…„ 10 ์›” 22 ์ผ, 11:32:17)
[GCC 8.2.0]

00 - Bug 15 - Discussion numpy.ufunc

๋ชจ๋“  13 ๋Œ“๊ธ€

๋ณต์†Œ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ”๋‹ฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ณต์†Œ์ˆ˜์˜ ๋ฐ”๋‹ฅ
๋˜ํ•œ ํ—ˆ์ˆ˜ ๋ถ€์™€ ๋ณต์†Œ ๋ถ€๋ฅผ ๋”ฐ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 2 ๊ฐœ์˜ ๋ณต์†Œ์ˆ˜๋ฅผ ๋‚˜๋ˆŒ ๋•Œ ํ•˜๋‚˜์˜ ๋ณต์†Œ์ˆ˜๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ( ๋ณต์†Œ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ )

๋˜ํ•œ,
`>>> (1. + 1.j) // 2

์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "", 1 ํ–‰, in
์œ ํ˜• ์˜ค๋ฅ˜ : ๋ณต์†Œ์ˆ˜์˜ ๋ฐ”๋‹ฅ์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค .`

์œ ์‚ฌํ•˜๊ฒŒ 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

์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "", 1 ํ–‰, in
TypeError : ufunc 'floor_divide'๋Š” ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ''safe ''์บ์ŠคํŒ… ๊ทœ์น™์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
`
ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ• ๊นŒ์š”?

@ kaivu1999 ํ’€ ์š”์ฒญ์€ ์ข‹์€ ์‹œ์ž‘์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜๊ฒฌ์— Fixes #13236 ๋ฅผ ๋„ฃ์–ด ์ฃผ์‹œ๋ฉด ๋ฌธ์ œ์™€ PR์„ ์ƒํ˜ธ ์ฐธ์กฐ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์šฐ์Šค ์ •์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ๋ผ๋Š” ๊ฒƒ์„ ๋ฌธ์„œํ™”ํ•˜๋ฉด ์‹ค์ˆ˜ ๋ถ€๋ถ„๊ณผ ํ—ˆ์ˆ˜ ๋ถ€๋ถ„ ๋ชจ๋‘์—์„œ ๋ฐ”๋‹ฅ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ํŒŒ์ด์ฌ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰