【发布时间】:2018-04-05 06:55:39
【问题描述】:
我想比较两个不同 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 循环解决它,但它需要很长时间。
这种比较最有效的方法是什么?
【问题讨论】:
-
显示你的循环代码?
标签: arrays python-3.x performance numpy comparison