我有两个numPy数组,它们的行数和列数不同。每个阵列的结构-年、月、日、时间、卫星数、数据值。每个数组都有不同类型的数据。你知道吗
如何比较这两个数组以仅获得两个数组中的公共行,其中比较参数是前5列,然后是具有相应值的两列。例如:
A=[('2015', '1', '1', 0.0, 'G06', 46.29)
('2015', '1', '1', 0.0, 'G12', 444.344)
('2015', '1', '1', 0.0, 'G14', -99.269)
('2015', '1', '1', 0.0, 'G20', 6.874)
('2015', '1', '1', 0.0, 'G24', 158.488)
('2015', '1', '1', 0.0, 'G25', -60.831)
('2015', '1', '1', 0.0, 'G31', -48.234)
('2015', '1', '1', 0.0, 'R07', -6.243)]
B=[('2015', '1', '1', 0.0, 'G06', '0.000')
('2015', '1', '1', 0.0, 'G12', '0.000')
('2015', '1', '1', 0.0, 'G14', '0.000')
('2015', '1', '1', 0.0, 'G24', '0.000')
('2015', '1', '1', 0.0, 'G25', '0.000')
('2015', '1', '1', 0.0, 'G29', '0.000')
('2015', '1', '1', 0.0, 'G31', '0.000')]
结果,我想得到:
C=[('2015', '1', '1', 0.0, 'G06', 46.29, '0.000')
('2015', '1', '1', 0.0, 'G12', 444.344, '0.000')
('2015', '1', '1', 0.0, 'G14', -99.269, '0.000')
('2015', '1', '1', 0.0, 'G24', 158.488, '0.000')
('2015', '1', '1', 0.0, 'G25', -60.831, '0.000')
('2015', '1', '1', 0.0, 'G31', -48.234, '0.000')]
我可以使用循环来完成,但这不是一个有效的解决方案,当数组的行数超过50000行时。你知道吗
使用熊猫:
其中
'inner'
表示仅当两个数组中都存在键值时才合并。left_on=[0,1,2,3,4]
表示将这些列用作键值。你知道吗结果如下:
在
numpy
代码的死水中有一个简单的解决方案recfunctions.join_by
。你知道吗生产
在当前组织中
recfunctions
必须单独导入。 https://stackoverflow.com/a/33680606/901925我们必须检查代码,看看它是如何实际实现的。我不知道,如果没有进一步的计时,速度与等价的
pandas
相比会如何。你知道吗对于这个小样本,
recfunctions
比pandas
快,特别是如果包括创建数据帧所需的时间。你知道吗与
in1d
(不尝试合并)这样的numpy集操作相比,这两种操作都很慢:相关问题 更多 >
编程相关推荐