在Python中加入ndarray,其中索引是浮点数,只是大致相等

时间:2013-11-09 20:51:31

标签: python join multidimensional-array

假设我有两个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]]

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

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

我有点暗示答案可能介于merging indexed array in Python之间 并使用蒙面数组。基本上,我不知道,请帮忙!

1 个答案:

答案 0 :(得分: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