我是Python新手。我使用np.lib.recfunctions.join_by来连接两个数组,但结果是错误的。以下是示例和结果:
a = np.array([('a',1),('b',2),('b',2),('c',3)],dtype=[('key','<U1'),('x','<i4')])
b = np.array([('a',-1),('b',-2)],dtype=[('key','<U1'),('y','<i4')])
np.lib.recfunctions.join_by('key', a, b, jointype='outer').data
array([(u'a', 1, -1), (u'b', 2, -2), (u'b', 2, 0), (u'c', 3, 0)],
dtype=[])
为什么第二个加入b表示0不是-2
我想要的是
(a,1,-1),(b,2,-2),(b,2,-2),(c,3,0)
怎么做?
由于
答案 0 :(得分:0)
有一些时间在选项中检查一下。我认为使用'.data'隐藏部分信息以获得回报。请考虑以下
from numpy.lib import recfunctions as rfn
a # array a and dtype
array([('a', 1), ('b', 2), ('b', 2), ('c', 3)],
dtype=[('key', '<U5'), ('x', '<i4')])
a_u # np.unique(a) and dtype
array([('a', 1), ('b', 2), ('c', 3)],
dtype=[('key', '<U5'), ('x', '<i4')])
b # array b and dtype
array([('a', -1), ('b', -2)],
dtype=[('key', '<U5'), ('x', '<i4')])
# join examples
rfn.join_by('key', a, b, jointype='outer') # join b to a
masked_array(data = [('a', 1, -1) ('b', 2, -2) ('b', 2, --) ('c', 3, --)],
mask = [(False, False, False) (False, False, False) (False, False, True) (False, False, True)],
fill_value = ('N/A', 999999, 999999),
dtype = [('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])
rfn.join_by('key', a_u, b, jointype='outer') # join b to a_u
masked_array(data = [('a', 1, -1) ('b', 2, -2) ('c', 3, --)],
mask = [(False, False, False) (False, False, False) (False, False, True)],
fill_value = ('N/A', 999999, 999999),
dtype = [('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])
rfn.join_by('key', a, b, jointype='inner').data # join b to a, with data
array([('a', 1, -1), ('b', 2, -2), ('b', 2, 0)],
dtype=[('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])
rfn.join_by('key', a_u, b, jointype='inner').data # join b to a_u, with data
array([('a', 1, -1), ('b', 2, -2)],
dtype=[('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])
如果跳过.data,则返回更多信息(有用?)。 在您的简单情况下,只需返回数组'a'中的唯一记录即可解决您在解释时遇到的任何问题。
我认为,如果参与此次加入的字段数量有限,您将需要更详细地调查您需要返回的内容。