当尝试连接具有 dtype 字符串字段但长度不同的记录数组时,连接失败。
正如您在以下示例中所见,如果 'f1' 的长度相同,则连接有效,但如果不是,则连接失败。
In [1]: import numpy as np
In [2]: a = np.core.records.fromarrays( ([1,2], ["one","two"]) )
In [3]: b = np.core.records.fromarrays( ([3,4,5], ["three","four","three"]) )
In [4]: c = np.core.records.fromarrays( ([6], ["six"]) )
In [5]: np.concatenate( (a,c) )
Out[5]:
array([(1, 'one'), (2, 'two'), (6, 'six')],
dtype=[('f0', '<i8'), ('f1', '|S3')])
In [6]: np.concatenate( (a,b) )
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/u/jegannas/<ipython console> in <module>()
TypeError: expected a readable buffer object
但是,如果我们只是连接数组(而不是记录),它会成功,尽管字符串的大小不同。
In [8]: np.concatenate( (a['f1'], b['f1']) )
Out[8]:
array(['one', 'two', 'three', 'four', 'three'],
dtype='|S5')
这是连接记录时连接中的错误还是预期的行为。我想出了以下方法来克服这个问题。
In [10]: np.concatenate( (a.astype(b.dtype), b) )
Out[10]:
array([(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'three')],
dtype=[('f0', '<i8'), ('f1', '|S5')]
但是这里的问题是我必须遍历所有的recarrays,我正在连接并找到最大的字符串长度,我必须使用它。如果记录数组中有多个字符串列,我还需要跟踪其他一些事情。
你认为克服这个问题的最好方法是什么,至少现在是这样?