2017-10-24 6 views
1

2つの異なるnumpy配列AとBの列の値を比較したいと思います。より具体的には、Aには理論的な値Bの3列目に記載されています。2つのnumpy配列の同様の要素を許容値で取得する方法

完全一致がないため、許容値を使用する必要があります。 0.01である。 Aの各値に対して、選択された公差に対してBの0〜20の一致が予想されます。

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の値の許容範囲内で、ここでは一例であり、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-loopsで解決できますが、それには年齢がかかります。

この比較で最も効率的な方法は何でしょうか?

+0

あなたの愚かコードを表示するでしょうか? – Divakar

答えて

0

私はそれが

i = np.nonzero(np.isclose(A[:,:,None], B[:, 2]))[-1] 

np.iscloseいくつかの異なる許容度パラメータを受け入れるようなものになるだろう想像します。 A値に近いB

値は、B[i, 2]

+0

ありがとうございます! 500と30000エントリの私の現在の例では、1ループあたり5秒(±7デシベル、毎回1ループ)の±285ミリ秒しかかかりません。 :-) – Jogi

+0

アップホートと忘れずにマークしてください –

関連する問題