[より単純なアプローチを最優先するように編集されました。]
実際には、私はおそらく次のことを行います。
In [166]: d = dict(m_out[:,::-1])
In [167]: [(k, d[k]) for k in eqn_out if k in d]
Out[167]: [(7, 6), (9, 8), (11, 10), (13, 12), (15, 14), (17, 16)]
しかし、楽しみのために、ゴツゴツしたままで、次のようなものはどうですか?
[更新:より良いnumpyメソッド]:
In [15]: m_out[np.in1d(v, eqn_out)][:, ::-1]
Out[15]:
array([[ 7, 6],
[ 9, 8],
[11, 10],
[13, 12],
[15, 14],
[17, 16]])
または私の元の厄介なアプローチ:
In [150]: import numpy as np
In [151]: m_out = np.arange(50).reshape(25,2)
In [152]: v = m_out[:,1]
In [153]: eqn_out = np.arange(7, 18)
In [154]: eqn_out
Out[154]: array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])
私たちが知っている値だけを保持します:
In [155]: np.intersect1d(eqn_out, v)
Out[155]: array([ 7, 9, 11, 13, 15, 17])
それらがどこにあるかを見つけます(データがソートされていると仮定します!!):
In [156]: v.searchsorted(np.intersect1d(eqn_out, v))
Out[156]: array([3, 4, 5, 6, 7, 8])
選択の目的でこれらのインデックスを使用します。
In [157]: m_out[v.searchsorted(np.intersect1d(eqn_out, v))]
Out[157]:
array([[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17]])
フリップ:
In [158]: m_out[v.searchsorted(np.intersect1d(eqn_out, v))][:,::-1]
Out[158]:
array([[ 7, 6],
[ 9, 8],
[11, 10],
[13, 12],
[15, 14],
[17, 16]])