当我尝试在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)
这只是一个错误?或者有什么办法可以防止这个问题?
看起来像我的错误 - 你应该在bug跟踪 – Eric
报告它的缺陷是明显的更简单地称为'bar.view( np.ma.MaskedArray).sort()' – Eric
@Eric - 啊......所以它可能与[这个bug]密切相关(https://github.com/numpy/numpy/issues/8069)。 – eatcrayons