Numpy: TypeError: 'same_kind' ์บ์ŠคํŒ… ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ dtype('float64')์—์„œ dtype('uint8')์œผ๋กœ ufunc add ์ถœ๋ ฅ์„ ์บ์ŠคํŒ…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

Gizeh ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ตœ์‹  ๋ฒ„์ „์˜ Numpy๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์œ„์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Numpy ๋ฒ„์ „ 1.08์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

File "animation/target_animation.py", line 161, in draw
    fill = gizeh.ImagePattern(self.bg.data, self.bg.pos, filter='best')
  File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 295, in __init__
  File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 50, in from_image
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('uint8') with casting rule 'same_kind'

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ a += b ์™€ ๊ฐ™์€ ์ฝ”๋“œ์ด๋ฉฐ np.add(a, b, out=a, casting="unsafe") ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์บ์ŠคํŠธ ๋™์ž‘์„ ์›ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ. ๋˜๋Š” b๊ฐ€ ๊ฑฐ๋Œ€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์บ์ŠคํŠธ ใ„ด ๋จผ์ €.

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

np.add ufunc์—์„œ casting ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์ŠคํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Gizeh๊ฐ€ ์˜์กดํ•˜๋Š” ๋™์ž‘์€ 1.7๋ถ€ํ„ฐ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

casting='unsafe' ์ž…๋‹ˆ๋‹ค.

์ด @charris๋ฅผ ์–ด๋””์—์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ a += b ์™€ ๊ฐ™์€ ์ฝ”๋“œ์ด๋ฉฐ np.add(a, b, out=a, casting="unsafe") ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์บ์ŠคํŠธ ๋™์ž‘์„ ์›ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ. ๋˜๋Š” b๊ฐ€ ๊ฑฐ๋Œ€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์บ์ŠคํŠธ ใ„ด ๋จผ์ €.

gizeh/moviepy ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์œผ๋กœ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. seberg๊ฐ€ ์ œ์•ˆํ•œ๋Œ€๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. gizeh.py์—์„œ 40ํ–‰์„ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

arr += image.flatten()

๋ผ์ธ:

arr = np.add(arr, image.flatten(), out=arr, casting="unsafe")

์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด _๋บ„์…ˆ_ํ•  ๋•Œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
yn -= self.y_mean

๋‹ค์Œ๊ณผ ๊ฐ™์ด numpy.subtract ํ†ตํ•ด ๋นผ๊ธฐ๋ฅผ
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")

@seberg ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :+1:

@FilipSavic95 : yn -= self.y_mean.astype(yn.dtype) ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@eric-wieser ์˜ˆ, ๋ฐฉ๊ธˆ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :+1:

๋ฌธ์ œ๋Š” ์ž‘์—… ์ž์ฒด์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ •๋ฐ€๋„์ž…๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์บ์ŠคํŒ…์€ ๋” ํฐ(rhs) ์ •๋ฐ€๋„(๋˜๋Š” ๊ฒฐํ•ฉ๋œ ์•ˆ์ „ํ•œ dtype)๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ์˜ต์…˜์€ ์บ์ŠคํŒ…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋” ๋‚ฎ์€ ์ •๋ฐ€๋„๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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