Iは、各エントリが3Dベクトルである長さtot_vec
のnumpyのアレイembed_vec
有する:この配列の各要素についてnumpy配列のエントリを互いに効率的に比較する方法は?
[[ 0.52483319 0.78015841 0.71117216]
[ 0.53041481 0.79462171 0.67234534]
[ 0.53645428 0.80896727 0.63119403]
...,
[ 0.72283509 0.40070804 0.15220522]
[ 0.71277758 0.38498613 0.16141834]
[ 0.70221445 0.36918032 0.17370776]]
、私が「近くにある他のエントリの数を知りたいと"そのエントリに。閉じるとは、2つのベクトルの間の距離が指定された値R
より小さいことを意味します。このためには、この配列内のすべての可能なペアを互いに比較し、配列内の各ベクトルの近接ベクトルの数を調べる必要があります。だから私はこれをやっている:私は2つのネストされたPythonのループを持っていると、より大きなアレイサイズのために、これは永遠にかかるため
p = np.zeros(tot_vec) # This contains the number of close vectors
for i in range(tot_vec-1):
for j in range(i+1, tot_vec):
if np.linalg.norm(embed_vec[i]-embed_vec[j]) < R:
p[i] += 1
しかし、これは非常に非効率的です。これがC++やFortranであれば大きな問題にはなりませんでした。私の質問は、numpyを効率的に使用するためにベクトル化手法を使って効率的に同じことを実現できますか?副次的なこととして、私はパンダを使った解決策も気にしない。
実際のユースケースで 'embed_vec'の形は何ですか? – Divakar
@Divakar:それは '(60000、3)' – Peaceful
@Peaceful多次元の距離を使用しているので、コメントを削除しました。この論理の一部を使用しようと思うかもしれませんが、これは明らかに異なる質問です。 – piRSquared