2017-06-26 43 views
2

當我嘗試在NumPy 1.11或1.12(Python 3.5)中將「uint16」字段連接到結構化數組時,會遇到TypeError。NumPy recfunctions 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) 

這是錯誤:

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' 

如果我使用 'float16' 不會出現同樣的問題。

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

看起來像我的錯誤 - 你應該在bug跟蹤 – Eric

+1

報告它的缺陷是明顯的更簡單地稱爲'bar.view( np.ma.MaskedArray).sort()' – Eric

+1

@Eric - 啊......所以它可能與[這個bug]密切相關(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