Numpy: ๊ตฌ์กฐํ™” ๋œ ๋ฐฐ์—ด ์—ฐ๊ฒฐ ๋ฌธ์ œ (์„ธ๊ทธ๋จผํŠธ ์˜ค๋ฅ˜) (์ถ”์  # 2084)

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

_2012-03-19 @astrofrog์˜ ์›๋ณธ โ€‹โ€‹ํ‹ฐ์ผ“ http://projects.scipy.org/numpy/ticket/2084 , unknown์— ํ• ๋‹น ๋จ _

๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. Numpy๋Š” ๊ตฌ์กฐํ™” ๋œ ๋ฐฐ์—ด์˜ ํ•„๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ตฌ์กฐํ™” ๋œ ๋ฐฐ์—ด ์ž์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ ํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

In [1]: import numpy as np

In [2]: d1 = np.array(zip(['a','b','c']), dtype=[('b', '|S1')])

In [3]: d2 = np.array(zip(['aa','bb','cc']), dtype=[('b', '|S2')])

In [4]: np.hstack([d1['b'],d2['b']])
Out[4]: 
array(['a', 'b', 'c', 'aa', 'bb', 'cc'], 
      dtype='|S2')

In [5]: np.hstack([d1, d2])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/tom/<ipython-input-5-bd5cc420043d> in <module>()
----> 1 np.hstack([d1, d2])

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/shape_base.pyc in hstack(tup)
    268 
    269     """
--> 270     return _nx.concatenate(map(atleast_1d,tup),1)
    271 

TypeError: invalid type promotion

์—”๋””์•ˆ์ด ๋‹ค๋ฅธ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์—์„œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

In [1]: import numpy as np

In [2]: d1 = np.array(zip([1,2,3]), dtype=[('a', '<f4')])

In [3]: d2 = np.array(zip([1,2,3]), dtype=[('a', '>f4')])

In [4]: np.hstack([d1['a'],d2['a']])
Out[4]: array([ 1.,  2.,  3.,  1.,  2.,  3.], dtype=float32)

In [5]: np.hstack([d1, d2])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/tom/<ipython-input-5-bd5cc420043d> in <module>()
----> 1 np.hstack([d1, d2])

/Users/tom/Library/Python/2.7/lib/python/site-packages/numpy/core/shape_base.pyc in hstack(tup)
    271     # As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
    272     if arrs[0].ndim == 1:
--> 273         return _nx.concatenate(arrs, 0)
    274     else:
    275         return _nx.concatenate(arrs, 1)

TypeError: invalid type promotion

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒƒ์ด ์ผ๊ด€๋˜๊ฒŒ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„์ง ์ฐพ์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋ถ„ํ•  ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

00 - Bug numpy.core

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

@charris :์ด ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ์—ด๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ ์–ด๋„ ํ•„๋“œ ์ด๋ฆ„์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๊ณ  ๋™์ผํ•œ ์ˆœ์„œ ์ธ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š”์ด ์ˆœ์„œ๋Œ€๋กœ ๋™์ผํ•œ ํ•„๋“œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผํ•˜๋ฉฐ ๊ฐ ํ•„๋“œ๋Š” ํ•ด๋‹น ์œ ํ˜•์„ ์Šน๊ฒฉ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

_trac ์‚ฌ์šฉ์ž lcampagn์ด 2012-09-24์— ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์„ธ๋ถ„ํ™” ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

>>> import numpy as np
>>> a = np.empty(1, dtype=[('x', object)])
>>> b = np.empty(1, dtype=[('x', float)])
>>> np.concatenate([a,b])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: invalid type promotion
>>> np.concatenate([a,b])
Segmentation fault (core dumped)

๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—์ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
Linux (1.6.1-6ubuntu1)์™€ Windows ๋ชจ๋‘์—์„œ์ด ์ถฉ๋Œ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์œ ์šฉํ•œ ์Šคํƒ ์ถ”์ ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.์ด ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์Šคํƒ์ด ์†์ƒ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

2012-09-24์— trac ์‚ฌ์šฉ์ž lcampagn์— ์˜ํ•ด ์ œ๋ชฉ์ด Issue with concatenating structured arrays ์—์„œ Issue with concatenating structured arrays (segmentation fault) ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด numpy/core/src/multiarray/convert_datatype.c:1122 ์˜ TODO์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

/* TODO: Also combine fields, subarrays, strings, etc */

์ ์–ด๋„ ์ด๊ฒƒ์€์ด ๋ฌธ์ œ์˜ ๊ถ๊ทน์  ์ธ ์‹คํŒจ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” segfault๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์—ฌ๊ธฐ์„œ ๊ถ๊ทน์  ์ธ ๋ฌธ์ œ๋Š” NumPy์—๊ฒŒ ์ž„์˜์˜ ๊ตฌ์กฐํ™” ๋œ ๋ฐฐ์—ด์„ ๊ฒฐํ•ฉํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋ณต์žกํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์กฐํ•ฉ์ด ๋ˆˆ์— ์ž˜ ๋„์ง€ ๋งŒ NumPy๊ฐ€ ์ž„์˜์˜ ๊ตฌ์กฐํ™” ๋œ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค (๊ฐ™์€ ์ด๋ฆ„์˜ ํ•„๋“œ๊ฐ€ ๊ฒฐํ•ฉ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? ๋‚จ์€ ๊ฒƒ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๊นŒ?).

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์—ด์–ด๋‘๊ณ  ๋‚ด ๋…ธ๋ ฅ์„ ์ง€์‹œ ํ•  ๋‹ค๋ฅธ ๊ณณ์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-P.

๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ segfaultํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ญ”๊ฐ€ ์•Œ์•„๋‚ผ ๋•Œ๊นŒ์ง€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ง€๊ธˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ segfault์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@charris :์ด ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ์—ด๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ ์–ด๋„ ํ•„๋“œ ์ด๋ฆ„์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๊ณ  ๋™์ผํ•œ ์ˆœ์„œ ์ธ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š”์ด ์ˆœ์„œ๋Œ€๋กœ ๋™์ผํ•œ ํ•„๋“œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผํ•˜๋ฉฐ ๊ฐ ํ•„๋“œ๋Š” ํ•ด๋‹น ์œ ํ˜•์„ ์Šน๊ฒฉ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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