gpt4 book ai didi

arrays - 如何获得具有公差的两个numpy数组的相似元素

转载 作者:行者123 更新时间:2023-12-04 17:48:38 24 4
gpt4 key购买 nike

我想比较两个不同的 numpy 数组 A 和 B 的列的值。更具体地说,A 包含来自真实实验的值,我想将其与 B 的第三列中给出的理论值相匹配。

没有完美匹配,因此我必须使用公差,例如0.01。对于 A 中的每个值,我预计 B 中会根据所选容差匹配 0 到 20 次。因此,我希望 B 中的那些行在 A 中的值的容差范围内。

更具体地说,这里有一个例子:

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 的所有值都将匹配 A[3,0] 和 A[4,0],容差为 0.02。

我的首选结果是 C[:,0] 中 A 的匹配值以及 C[:,1] 中 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 循环解决它,但这需要很长时间。

这种比较最有效的方法是什么?

最佳答案

我想它会是这样的

i = np.nonzero(np.isclose(A[:,:,None], B[:, 2]))[-1]

np.isclose接受一些不同的公差参数。

B 中接近 A 值的值将是 B[i, 2]

关于arrays - 如何获得具有公差的两个numpy数组的相似元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com