Numpy: BUG : timedelta ๋ฐ float ํ”„๋กœ๋ชจ์…˜์ด ๋•Œ๋•Œ๋กœ ์ž‘๋™ ํ•จ

์— ๋งŒ๋“  2020๋…„ 06์›” 10์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

๋‹ค์Œ ์˜ˆ๋Š” ๋Œ€์นญ ๊ฒฐ๊ณผ๋กœ ์ด์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

np.promote_types("float32", "m8")
# returns "m8", which is probably wrong
np.promote_types("m8", "float32")
# raises TypeError.

๋‹ค๋ฅธ ๋ชจ๋“  ๋ถ€๋™ ์†Œ์ˆ˜์  ์œ ํ˜•๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ํŠน์ • ufunc ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ•˜๋Š” ํ•ดํ‚น๊ณผ ๊ฐ™์€ ์ด์ƒํ•œ ๋…ผ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์ง€๋งŒ ์•„์ง ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

00 - Bug numpy.dtype

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

์ ์–ด๋„ np.multiply๊ฐ€ ์ด๊ฒƒ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import numpy as np
print(np.multiply(np.timedelta64(1), 1.2))

์œ„์˜ ๋‚ด์šฉ๋„ ๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ์€ ufuncs์˜ ๊ฒฝ์šฐ ๋ฌธ์„œ์— ์„ค๋ช… ๋œ๋Œ€๋กœ "๋ฐ์ดํ„ฐ ์œ ํ˜•์ด"์•ˆ์ „ํ•˜๊ฒŒ "๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์บ์ŠคํŠธ ๋  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ"๋ผ๋Š” ์งˆ๋ฌธ์— ์˜ํ•ด "์บ์ŠคํŒ… ๊ทœ์น™์ด ๊ตฌํ˜„๋œ๋‹ค๋Š” ๊ฒƒ"์ด โ€‹โ€‹ํ•ญ์ƒ ์‚ฌ์‹ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์บ์ŠคํŒ…์ด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์œ„์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ์žˆ์ง€๋งŒ ufunc๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” promote_types๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜์ง€ ์•Š์€ ์œ ํ˜• ์Šน๊ฒฉ (np.promote_types ( "float32", "m8") ๋ฐ np.promote_types ( "m8", "float32") ๋ชจ๋‘์— ๋Œ€ํ•ด)์ด๋ผ๊ณ  ๋งํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ufunc๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ๊ณ„์† ํ—ˆ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์‚ฌ๋ก€๋ณ„๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, np.promote_types ๋Š” ํ•ญ์ƒ ํ•ฉ๋ฆฌ์ ์ธ ์ผ๋ฐ˜ ๊ทœ์น™์ด์–ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ "common dtype"์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด np.concatenate ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” dtype์ž…๋‹ˆ๋‹ค.

๊ฐ ufunc๋Š” "๊ณตํ†ต dtype"๋˜๋Š” ๊ธฐํƒ€ ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์ค‘ ๋ฐ timedelta64์— ๋Œ€ํ•ด ํŠน๋ณ„ํžˆ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋ณ„๋„์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ufuncs๋Š” ๋Œ€๋ถ€๋ถ„ np.can_cast(..., ...) ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ณณ์—์„œ์ด ๋…ผ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํ˜• ์Šน๊ฒฉ๊ณผ ์ผ์น˜ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋…ผ์˜๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ๋‚˜๋Š” ๊ณ„์†ํ•ด์„œ promote_types์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

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