_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
์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ด ์ผ๊ด๋๊ฒ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ์์ง ์ฐพ์ง ๋ชปํ์ง๋ง ๋ถํ ์ค๋ฅ๋ฅผ ์ผ์ผํฌ ์๋ ์์ต๋๋ค.
_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 :์ด ๋ฌธ์ ๊ฐ ๋ค์ ์ด๋ฆด ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ์ ์ด๋ ํ๋ ์ด๋ฆ์ด ๋ชจ๋ ์ผ์นํ๊ณ ๋์ผํ ์์ ์ธ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋์ด ์์๋๋ก ๋์ผํ ํ๋ ์ด๋ฆ์ ๊ฐ์ ธ์ผํ๋ฉฐ ๊ฐ ํ๋๋ ํด๋น ์ ํ์ ์น๊ฒฉ ํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@charris :์ด ๋ฌธ์ ๊ฐ ๋ค์ ์ด๋ฆด ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ์ ์ด๋ ํ๋ ์ด๋ฆ์ด ๋ชจ๋ ์ผ์นํ๊ณ ๋์ผํ ์์ ์ธ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋์ด ์์๋๋ก ๋์ผํ ํ๋ ์ด๋ฆ์ ๊ฐ์ ธ์ผํ๋ฉฐ ๊ฐ ํ๋๋ ํด๋น ์ ํ์ ์น๊ฒฉ ํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.