2 つの 2D numpy 配列が与えられ、行数が同じであるとしますa
。さらに、とのb
各行i
には共通の要素が 1 つしかないことがわかっていると仮定します。ただし、この要素は複数回発生する可能性があります。この要素をできるだけ効率的に見つけるにはどうすればよいでしょうか?a
b
例:
import numpy as np
a = np.array([[1, 2, 3],
[2, 5, 2],
[5, 4, 4],
[2, 1, 3]])
b = np.array([[4, 5],
[3, 2],
[1, 5],
[0, 5]])
desiredResult = np.array([[np.nan],
[2],
[5],
[np.nan]])
intersect1d
最初の軸に沿って適用することで、簡単に実装を考え出すことができます。
from intertools import starmap
desiredResult = np.array(list(starmap(np.intersect1d, zip(a, b))))
どうやら、python の組み込みの set 操作を使用するとさらに高速です。結果を目的の形式に変換するのは簡単です。
ただし、できるだけ効率的な実装が必要です。starmap
したがって、すべての行に対して python 呼び出しが必要だと思うので、私は好きではありません。純粋にベクトル化されたオプションが欲しいのですが、これが行ごとに共通の値が最大で 1 つあるという追加の知識を活用できれば幸いです。
タスクをスピードアップし、ソリューションをよりエレガントに実装する方法を知っている人はいますか? C コードや cython を使用してもかまいませんが、コーディングの手間はあまりかかりません。