1

2 つの 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]]

これら 2 つのテーブルを結合して、次のように返します。

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 left join 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 に答える