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

标签 arrays python-3.x performance numpy comparison

我想比较两个不同的 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/

相关文章:

Java 性能 String.indexOf(char) 与 String.indexOf(single String)

ios - swift 中字典键的数组

c - 需要帮助解决数组问题

arrays - 如何将数组传递给 std::make_tuple?

python - Pandas 数据框中值的组合

ios - 哪一个在性能方面是有效的 - AppDelegate 的对象或 AppDelegate 的宏?

c++ - Qt5 在 TabWidget 中绘制许多像素图比 qt4 慢

javascript - 如何从 Javascript 添加 CSS 样式

python-3.x - 如何使用 AWS 证书管理器验证域

python - 我可以在运行时从脚本打开应用程序吗?