我想比较两个不同的numpy数组A和B中列的数值。具体来说,A包含实验数据,我想将其与B的第三列中给定的理论数值进行匹配。
由于不存在完美匹配,因此我必须使用公差,例如0.01。对于A中的每个值,我希望在所选公差范围内在B中找到0到20个匹配项。结果,我想获得那些与A中的值在公差范围内的B中的行。
为了更具体地说明,这里有一个示例:
A = array([[ 2.83151742e+02, a0],
[ 2.83155339e+02, a1],
[ 3.29241719e+02, a2],
[ 3.29246229e+02, a3]])
B = array([[ 0, 0, 3.29235519e+02, ...],
[ 0, 0, 3.29240819e+02, ...],
[ 0, 0, 3.29241919e+02, ...],
[ 0, 0, 3.29242819e+02, ...]])
因此,在容差为0.02的情况下,B的所有值都与A [3,0]和A [4,0]匹配。
我希望结果如下,其中包括A匹配的C [:,0]的值以及C [:,0]和C [:,2]之间的差异:
C = array([[ 3.29241719e+02, c0, 3.29235519e+02, ...],
[ 3.29241719e+02, c1, 3.29240819e+02, ...],
[ 3.29241719e+02, c2, 3.29241919e+02, ...],
[ 3.29241719e+02, c3, 3.29242819e+02, ...]
[ 3.29242819e+02, c4, 3.29235519e+02, ...],
[ 3.29242819e+02, c5, 3.29240819e+02, ...],
[ 3.29242819e+02, c6, 3.29241919e+02, ...],
[ 3.29242819e+02, c7, 3.29242819e+02, ...]])
通常情况下,A的形状为(500,2),B的形状为(300000,11)。我可以使用for循环解决它,但是这需要很长时间。
对于这种比较,最有效的方法是什么?