1

假设我有两个 ndarray:

a = [[1.1,10]
     [2.2,20]
     [3.3,30]
     [4.4,40]
     [5.5,50]]

b = [[1.5,100]
     [1.9,200]
     [2.3,250]
     [3.9,300]]

我想将这两个表连接在一起,以便返回:

c = [[1.1,10,None]
     [2.2,20,200]  #note this is 200 not 250
     [3.3,30,250]
     [4.4,40,300]
     [5.5,50,300]]

换句话说,我想做类似“A左连接B,如果键不完全匹配,使用小于B且离B最近的键”。

如果我没有正确格式化这个问题,请原谅我,这是我在 StackOverflow 上的第一个问题,而且我不是专业的编码员。不过,我已经通过 StackOverflow 和 Google 进行了彻底的搜索。

我有某种暗示,答案可能是在 Python 中合并索引数组 和使用掩码数组之间。基本上,我不知道,请帮助!

4

1 回答 1

3

使用numpy.searchsorted

import numpy as np

a = np.array([[1.1,10],
     [2.2,20],
     [3.3,30],
     [4.4,40],
     [5.5,50]])

b = np.array([[1.5,100],
     [1.9,200],
     [2.3,250],
     [3.9,300]])

idx = b[:,0].searchsorted(a[:,0], side='right')
bval = np.r_[np.nan, b[:,1]]
c = np.column_stack([a, bval[idx]])

print(c)

产量

[[   1.1   10.     nan]
 [   2.2   20.   200. ]
 [   3.3   30.   250. ]
 [   4.4   40.   300. ]
 [   5.5   50.   300. ]]

请注意,上述计算与 相关联3.3250而不是200。如果我正确理解了问题,那就是预期的结果,因为3.3 > 2.3.

于 2013-11-09T21:21:33.793 回答