Numpy: ๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์ž ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ๋‚˜๋ˆ—์…ˆ๊ณผ ํ• ๋‹น ์ž‘์—… ๋ถ„๋ฆฌ

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

์•Œ๋ ค์ง„ ๋ฌธ์ œ๋ผ๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค...

์ด๊ฒƒ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

import numpy as np
a = np.array([1, 2, 3])
a = a / 4

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

import numpy as np
a = np.array([1, 2, 3])
a /= 4

์ฆ‰:

TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

๋‚˜๋Š” ๊ทธ๋“ค์ด ๋˜‘๊ฐ™์ด ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ž…๋‹ˆ๋‹ค.

numpy ๋ฒ„์ „ 1.14.0 ์‚ฌ์šฉ.

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

๋‚˜๋Š” ๋‹น์‹ ์ด Python 3์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Python 3์—์„œ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. a / 4 ์˜ ๊ฒฐ๊ณผ๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฐ์—ด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. a = a / 4 ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ๋‹จ์ˆœํžˆ ์žฌํ• ๋‹นํ•˜๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ a = np.true_divide(a, 4) ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒˆ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  a ๋ผ๋Š” ์ด๋ฆ„์„ ๋‹ค์‹œ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํ• ๋‹น์„ ์‹œ๋„ํ•˜๋ฉด true_divide ufunc๊ฐ€ ๊ธฐ์กด a ์ •์ˆ˜ ๋ฐฐ์—ด np.true_divide(a, 4, out=a) ๋กœ ๋‹ค์‹œ ์ถœ๋ ฅํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” true_divide ๊ตฌํ˜„์ด ์—†์œผ๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋‹น์‹ ์ด Python 3์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Python 3์—์„œ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. a / 4 ์˜ ๊ฒฐ๊ณผ๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฐ์—ด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. a = a / 4 ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ๋‹จ์ˆœํžˆ ์žฌํ• ๋‹นํ•˜๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ a = np.true_divide(a, 4) ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒˆ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  a ๋ผ๋Š” ์ด๋ฆ„์„ ๋‹ค์‹œ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํ• ๋‹น์„ ์‹œ๋„ํ•˜๋ฉด true_divide ufunc๊ฐ€ ๊ธฐ์กด a ์ •์ˆ˜ ๋ฐฐ์—ด np.true_divide(a, 4, out=a) ๋กœ ๋‹ค์‹œ ์ถœ๋ ฅํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” true_divide ๊ตฌํ˜„์ด ์—†์œผ๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ช…์พŒํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

>>> a = [1 ,2, 3]
>>> b = a
>>> id(a) == id(b)
True
>>> a += [4, 5, 6]  # list object is changed, no new object created
>>> id(a) == id(b)
True
>>> a = a + [4, 5, 6]  # new object created, and assigned to `a`
>>> id(a) == id(b)
False

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•œ๋‹ค๋ฉด += ์ƒˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์€ out=a ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์–ด๋ ˆ์ด ์ƒ์„ฑ ์‹œ dtype=float ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์•„์š”.

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