我有两个数值列表(或数据框列 - 无关紧要):
L1 = [1, 0.5, 3, 7, 4.7]
L2 = [2, 0.4, 8, 0.3, 5]
Run Code Online (Sandbox Code Playgroud)
例如。我需要关联这些列表并找到与(indexOfElementFromL1, indexOfElementFromL2)两个元素的最小差异相对应的对。例如,对于我的示例,它应该是:
(0,1), (1,1), (2,0), (3,2), (4,4).真正是我想要的 - 找到与 L1 中的每个元素最接近的元素 L2。当然,我可以采用天真的方法,例如:
for el1 in L1:
for el2 in L2:
....
Run Code Online (Sandbox Code Playgroud)
但我想看到更正确的解决方案
小智 5
您可以通过将列表转换为 numpy 数组并使用 numpy 广播来快速完成此操作:
a1 = np.array(L1)
a2 = np.array(L2)
indexes = abs(a1[:, None] - a2).argmin(axis=1)
out = list(enumerate(indexes))
Run Code Online (Sandbox Code Playgroud)
输出:
>>> indexes
array([1, 1, 0, 2, 4])
>>> out
[(0, 1), (1, 1), (2, 0), (3, 2), (4, 4)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |