Numpy: BUG : ์Šค์นผ๋ผ์™€ ๋ชจ์–‘ == (1,) ๋ฐฐ์—ด์„ ํ˜ผํ•ฉ ํ•  ๋•Œ ์ฐจ์› ๊ฒ€์ƒ‰์ด ์‹คํŒจ ํ•จ

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

np.array([0.25, np.array([0.3])]) ๋Š” float ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‹คํŒจํ•˜๊ณ  dtype์€ ๊ฐ์ฒด๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜๋„์ ์ž…๋‹ˆ๊นŒ?

00 - Bug numpy.dtype

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

Cc @nschloe , ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ผ์— ๋ฐ˜๋Œ€ํ•˜๋ฉฐ ๋ฌธ์ œ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CCing์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋„ค, ์ด๊ฑด ์ •๋ง ์ œ๊ฐ€ํ•˜๊ณ ์žˆ๋Š” ์ผ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. : smiley_cat : https://github.com/numpy/numpy/issues/10404

์—ฌ๊ธฐ์„œ ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๋‹น์‹ ์€ ํ”Œ๋กœํŠธ์™€ ๋ฐฐ์—ด์„ ํ•จ๊ป˜ ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Python ๋ชฉ๋ก์„ ๋งŒ๋“  ๊ฒฝ์šฐ

[0.25, np.array([0.3])]

๋‹น์‹ ์€ ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ float์ด๊ณ  ๋‘ ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๊ธธ์ด 1์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชฉ๋ก๊ณผ np.arrays๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ฉด ํ˜ผ๋ž€ ์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ์— ์•”์‹œ ์ ์œผ๋กœ dtype float ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋”๋ผ๋„ [float, vector[1]] ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ np.array([0.25, np.array([0.3])]) ์€ ์‹ค์ˆ˜๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/scipy/scipy/pull/11147/files#diff -21a6a0b0d89357857304bfba2da5a971L321์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์•„๋ฌดํŠผ,

๋ช…์‹œ์ ์ธ ๊ฒƒ์ด ์•”์‹œ์ ์ธ ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

๋„ค, ๋‹ซ์Šต๋‹ˆ๋‹ค. ๊ทธ PR์€ ์ตœ๊ทผ NEP 34 ๋ณ€๊ฒฝ ์‚ฌํ•ญ (๋ณต๊ท€ ์ดํ›„)์ด scipy์— ๋œ ๋ฐฉํ•ด๊ฐ€๋˜๋„๋ก ๋งŒ๋“ค์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ—‰

์—ฌ๊ธฐ์„œ ์•”์‹œ ์ ์œผ๋กœ dtype float ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋”๋ผ๋„ [float, vector [1]] ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด np.array(0.3, np.array([0.3]), dtype=object) ์žˆ์Šต๋‹ˆ๋‹ค.

Python ๋ชฉ๋ก์„ ๋งŒ๋“  ๊ฒฝ์šฐ ...

NumPy ndarray๋Š” ํŒŒ์ด์ฌ ๋ชฉ๋ก๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค
np.array([0.2, 0.3, 0.4]) ๋Š” dtype์— ๋Œ€ํ•ด np.float64 ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐœ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์ˆ˜์ค€์˜ ์ž๋™ ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ dtype ๊ฒ€์ƒ‰์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ˆซ์ž ์œ ํ˜• ๋˜๋Š” ๊ฐ์ฒด ์œ ํ˜• ์ค‘ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์ˆ˜์ค€์˜ ์ž๋™ ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ dtype ๊ฒ€์ƒ‰์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ "์ž๋™ํ™”"๋Š” ๋งค์šฐ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž…๋ ฅ ๊ฐ’์„ ์บก์ฒ˜ ํ•  ์ˆ˜์žˆ๋Š” "๊ฐ€์žฅ ๋‚ฎ์€"๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ํ•ญ์ƒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰