Numpy: BUG : mask = nomask๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์—์„œ ๋งˆ์Šคํฌ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์†Œ์œ ์ž์—๊ฒŒ ์ „ํŒŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ž‘์—… ์ค‘์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋งˆ์Šคํฌ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๋ฌธ์ œ

>>> a =np.arange(6,dtype=np.float64).reshape((2,3))
>>> a
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.]])
>>> am = np.ma.masked_array(a)
>>> am
masked_array(data =
 [[ 0.  1.  2.]
 [ 3.  4.  5.]],
             mask =
 False,
       fill_value = 1e+20)

>>> am[0][1]=np.ma.masked
>>> am
masked_array(data =
 [[ 0.  1.  2.]
 [ 3.  4.  5.]],
             mask =
 False,
       fill_value = 1e+20)

###--------- doesn't work----------------

>>> am[0,1]=np.ma.masked
>>> am
masked_array(data =
 [[0.0 -- 2.0]
 [3.0 4.0 5.0]],
             mask =
 [[False  True False]
 [False False False]],
       fill_value = 1e+20)

###-------this way it works---------

>>> am[1][1]=np.ma.masked
>>> am
masked_array(data =
 [[0.0 -- 2.0]
 [3.0 -- 5.0]],
             mask =
 [[False  True False]
 [False  True False]],
       fill_value = 1e+20)

###--------now it surprisingly works again--

Linux  3.19.8-100.fc20.x86_64 
Python 2.7.5
>>> np.__version__
'1.8.2'

๋‚ด ์‹œ์Šคํ…œ์ด ์ตœ์‹  ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ
๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

00 - Bug numpy.ma

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

nomask ์ƒ๊ฐํ•  ๋•Œ๋งˆ๋‹ค Donald Knuth๊ฐ€ "์กฐ๊ธฐ ์ตœ์ ํ™”๋Š” ๋ชจ๋“  ์•…์˜ ๊ทผ์›"์ด๋ผ๋Š” ๋ง๋„ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

nomask ๋„ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋น„์ •์ƒ์ ์ธ ์‚ฌ๋ก€์˜ ์ˆ˜๊ฐ€ ์ƒ๋‹นํžˆ ๋งŽ์œผ๋ฉฐ ์ด๋กœ ์ธํ•ด ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

๋งˆ์Šคํฌ๊ฐ€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์•„๋Š” ๊ฒƒ์ด ์ •๋ง ์ƒ์‚ฐ์ ์ธ ์ผ์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜๋Š” has_mask ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

nomask ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋งˆ์Šคํ„ฐ (1.12)์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ # 5580์ด ๊ณ ์น˜๊ธฐ๋ฅผ ๋ฐ”๋žฌ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋…ผ์˜ํ•œ ๋ฐ”์™€ ๊ฐ™์ด np.nomask ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด MaskedArray๋ฅผ ์ •๋ฐ€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ ๋Š”์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. MaskedArrays๋Š” ๋•Œ๋•Œ๋กœ ๋งˆ์Šคํฌ๋ฅผ ๋ถ€์šธ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ณ , ๋•Œ๋กœ๋Š” (๋งˆ์Šคํ‚น ๋œ ๊ฐ’์ด์—†๋Š” ๊ฒฝ์šฐ) ๋งˆ์Šคํฌ๋ฅผ False (๋ฐ np.nomask == False) ๊ฐ’์œผ๋กœ ๊ฐ„๋‹จํžˆ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” MaskedArray๋ฅผ ์Šฌ๋ผ์ด์‹ฑ ํ•  ๋•Œ (๊ทธ๋ฆฌ๊ณ  ๋ทฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ) ๋งˆ์Šคํฌ๊ฐ€ ํ˜„์žฌ ๋ถ€์šธ ๋ฐฐ์—ด ์ธ ๊ฒฝ์šฐ์—๋งŒ "๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ"์ƒ์ˆ˜ "False"์ธ ๊ฒฝ์šฐ์—๋Š” ๋ณผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ am[0][1] = ... ์ฒ˜์Œ ์‹œ๋„ ํ•  ๋•Œ ๋งˆ์Šคํฌ๋Š” ์ƒ์ˆ˜ "False"์ด๋ฉฐ ๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ ์‹œ๋„ํ•˜๋ฉด ๋งˆ์Šคํฌ๊ฐ€ ๋ถ€์šธ ๋ฐฐ์—ด๋กœ ์ €์žฅ๋˜์–ด ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์ด nomask ๋””์ž์ธ (์˜ˆ : # 7588)์œผ๋กœ ์ธํ•œ ๊ธด ๋ฒ„๊ทธ ๋ชฉ๋ก์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

nomask ์ƒ๊ฐํ•  ๋•Œ๋งˆ๋‹ค Donald Knuth๊ฐ€ "์กฐ๊ธฐ ์ตœ์ ํ™”๋Š” ๋ชจ๋“  ์•…์˜ ๊ทผ์›"์ด๋ผ๋Š” ๋ง๋„ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

nomask ๋„ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋น„์ •์ƒ์ ์ธ ์‚ฌ๋ก€์˜ ์ˆ˜๊ฐ€ ์ƒ๋‹นํžˆ ๋งŽ์œผ๋ฉฐ ์ด๋กœ ์ธํ•ด ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

๋งˆ์Šคํฌ๊ฐ€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์•„๋Š” ๊ฒƒ์ด ์ •๋ง ์ƒ์‚ฐ์ ์ธ ์ผ์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜๋Š” has_mask ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

nomask ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ ์— ๋ฉ”๋ชจ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ทฐ์˜ ๋งˆ์Šคํฌ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์›๋ณธ์˜ ๋งˆ์Šคํฌ๊ฐ€ ์ˆ˜์ •๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜์—๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์Šฌ๋ผ์ด์Šค์— ์•ก์„ธ์Šค ํ•  ๋•Œ ์ถœ๋ ฅ์€ data ์†์„ฑ์ด ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ทฐ์ด๊ณ  ๋งˆ์Šคํฌ๊ฐ€ nomask ์ธ ๋งˆ์Šคํฌ ๋œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค (์›๋ž˜ ๋ฐฐ์—ด์— ์ž˜๋ชป๋œ ํ•ญ๋ชฉ์ด์—†๋Š” ๊ฒฝ์šฐ). ๋˜๋Š” ์›๋ž˜ ๋งˆ์Šคํฌ์˜ ํ•ด๋‹น ์Šฌ๋ผ์ด์Šค๋ณด๊ธฐ. ๋งˆ์Šคํฌ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์›๋ณธ์œผ๋กœ ์ „ํŒŒํ•˜๋ ค๋ฉด ๋ทฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋…ธ ๋งˆ์Šคํฌ๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

masked ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ๋งˆ์Šคํ‚น ๋œ ๋ฐฐ์—ด์„ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ท€๊ฒฐ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. NEP๋ฅผ ๊ตฌ์„ฑ ํ•  ๊ฐ€์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งˆ์Šคํ‚น ๋œ ๋ฐฐ์—ด์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ์ž˜ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

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