2017-06-26 9 views
2

NumPy 1.11または1.12(Python 3.5)の構造化配列に 'uint16'フィールドを結合しようとすると、TypeErrorが発生します。NumPy recooks join_by TypeError

import numpy as np 
from numpy.lib import recfunctions as rfn 
foo = np.array([(1,)], 
       dtype=[('key', int)]) 
bar = np.array([(1,np.array([1,2,3]))], 
       dtype=[('key', int), ('value', 'uint16', 3)]) 
rfn.join_by('key', foo, bar) 

これはエラーです:私は 'float16' を使用している場合

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/user/anaconda3/lib/python3.5/site-packages/numpy/lib/recfunctions.py", line 986, in join_by 
    output.sort(order=key) 
    File "/home/user/anaconda3/lib/python3.5/site-packages/numpy/ma/core.py", line 5420, in sort 
    sidx = self.filled(filler).argsort(axis=axis, kind=kind, 
    File "/home/user/anaconda3/lib/python3.5/site-packages/numpy/ma/core.py", line 3668, in filled 
    fill_value = _check_fill_value(fill_value, self.dtype) 
    File "/home/user/anaconda3/lib/python3.5/site-packages/numpy/ma/core.py", line 470, in _check_fill_value 
    fill_value = np.array(_recursive_set_fill_value(fill_value, ndtype), 
    File "/home/user/anaconda3/lib/python3.5/site-packages/numpy/ma/core.py", line 436, in _recursive_set_fill_value 
    output_value.append(np.array(fval, dtype=cdtype).item()) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' 

同じ問題は発生しません。

import numpy as np 
from numpy.lib import recfunctions as rfn 
foo = np.array([(1,)], 
       dtype=[('key', int)]) 
bar = np.array([(1,np.array([1,2,3]))], 
       dtype=[('key', int), ('value', 'float16', 3)]) 
rfn.join_by('key', foo, bar) 

これは単なるバグですか?または、この問題を回避する方法がいくつかありますか?

+0

に固定されますが、私にはバグのように見える - あなたはバグがより簡単にbar.view 'として表示されているバグトラッカー – Eric

+1

にそれを報告しなければなりません( np.ma.MaskedArray).sort() ' – Eric

+1

@Eric - Ah ...これはおそらく[このバグ](https://github.com/numpy/numpy/issues/8069)と密接に関連しています。 – eatcrayons

答えて

1

これはバグです。 This PRはそれを部分的に修正していますが、np.maとサブタイプに関する虫の遭遇を見つけたようです。

float16 - Noneの理由は、エラーではなく、nan(疑わしい機能)に強制されていました。

編集: PRがマージされ、これはnumpyの1.14

+0

これを見てくれてありがとう!今のところ回避策が見つかるかどうかがわかります。 – eatcrayons

+0

この質問に対する具体的な回答ではありませんが、[この投稿](https://stackoverflow.com/questions/13795390/numpy-append-field-gives-shape-error-for-new-field-with-2d-shape )は、merge_arraysを使用した回避策を開発するのに十分な情報を私に提供しました。 – eatcrayons