๋ค์ ์๋ ๋์นญ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง์ง ์์ต๋๋ค.
np.promote_types("float32", "m8")
# returns "m8", which is probably wrong
np.promote_types("m8", "float32")
# raises TypeError.
๋ค๋ฅธ ๋ชจ๋ ๋ถ๋ ์์์ ์ ํ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ํน์ ufunc ํธ์ถ์ ํ์ฉํ๋ ํดํน๊ณผ ๊ฐ์ ์ด์ํ ๋ ผ๋ฆฌ๊ฐ ์๋์ง ๊ถ๊ธํ์ง๋ง ์์ง ์ฐพ์ง ๋ชปํ์ต๋๋ค.
์ ์ด๋ 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์ ๋ํ ์์ ์ฌํญ์ ์ถ๊ฐํ์ต๋๋ค.