์๋ ค์ง ๋ฌธ์ ๋ผ๋ฉด ์ฃ์กํฉ๋๋ค. ๊ฒ์ํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ ๋๋ฌด ๋ง์ต๋๋ค...
์ด๊ฒ์ ์๋ํฉ๋๋ค:
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
๊ตฌํ์ด ์์ผ๋ฏ๋ก ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ช ์พํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค. ์๋๋ ์ฐจ์ด์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด๋์์ต๋๋ค.
>>> 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
ํ๋ ๊ฒ์
๋๋ค.
์ข์์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๋น์ ์ด 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
๊ตฌํ์ด ์์ผ๋ฏ๋ก ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.