私は2次元numpy配列(すべて同じ形状)のPythonリストを持っており、等価配列のインデックスを抽出したいと思います。私はこの思い付いた:等価numpy 2D行のインデックスを検索
a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 2], [3, 4]])
c = np.array([[3, 4], [1, 2]])
d = np.array([[3, 4], [1, 2]])
e = np.array([[3, 4], [1, 2]])
f = np.array([[1, 2], [3, 4]])
g = np.array([[9, 9], [3, 4]])
li = [a, b, c, d, e, f, g]
indexes = list(range(len(li)))
equals = []
for i, a_i in enumerate(indexes):
a_equals = []
for j, b_i in enumerate(indexes[i+1:]):
if np.array_equal(li[a_i], li[b_i]):
del indexes[j]
a_equals.append(b_i)
if a_equals:
equals.append((a_i, *a_equals))
print(equals)
# [(0, 1, 5), (2, 3, 4)]
それは動作します(あなたは2次元配列のどれもが空でないと仮定することができます)しかしソリューションは不格好、おそらく遅いです。 Numpyでこれをもっとエレガントにする方法はありますか?
は、同一の形状のすべてのものを2次元配列で前処理ステップとしてnpi.multiplicity> 1を使用することができますが、シングルカウントインデックスを削除する確か
は、おそらく最高の、後処理ステップとして残っていますか? – Divakar
はい。常に同じ形。 – tsorn
出力の行の順序が重要です。つまり、代わりに '[(2,3,4)(0、1、5)]'を取得するとどうなりますか? – Divakar