Arrays 如何获得具有容差的两个numpy数组的相似元素
我想比较两个不同numpy数组A和B列中的值。更具体地说,A包含一个真实实验中的值,我想与B第三列中给出的理论值相匹配 没有完美匹配,因此我必须使用公差,例如0.01。对于A中的每个值,我希望B中的0到20个匹配与所选公差有关。因此,我希望得到B中那些在a中a值公差范围内的线 更具体地说,这里有一个例子:Arrays 如何获得具有容差的两个numpy数组的相似元素,arrays,python-3.x,performance,numpy,comparison,Arrays,Python 3.x,Performance,Numpy,Comparison,我想比较两个不同numpy数组A和B列中的值。更具体地说,A包含一个真实实验中的值,我想与B第三列中给出的理论值相匹配 没有完美匹配,因此我必须使用公差,例如0.01。对于A中的每个值,我希望B中的0到20个匹配与所选公差有关。因此,我希望得到B中那些在a中a值公差范围内的线 更具体地说,这里有一个例子: A = array([[ 2.83151742e+02, a0], [ 2.83155339e+02, a1], [ 3.29241719e+02, a2],
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, ...]])
因此,这里所有的B值都与公差为0.02的A[3,0]和A[4,0]相匹配
我的首选结果是C[:,0]中A的匹配值以及C[:,0]和C[:,2]在C[:,1]中的差值:
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循环来解决这个问题,但这需要很多时间
进行这种比较最有效的方法是什么?我想应该是这样的
i = np.nonzero(np.isclose(A[:,:,None], B[:, 2]))[-1]
接受几个不同的公差参数
B
中靠近A
值的值将是B[i,2]
显示您的循环代码?谢谢!对于我当前的示例,有500个和30000个条目,每个循环只需要5 s±285 ms(7次运行的平均值±标准偏差,每个循环1次)。:-)