5

符号のみが異なるnumpy配列内のすべての行の行インデックスを見つける必要があります。たとえば、配列がある場合:

>>> A
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 0, -1, -2],
       [ 9,  5,  6],
       [-3, -4, -5]])

出力を[(0,2),(1,4)]

一意の行 numpy.unique を見つける方法を知っているので、直観的には、配列をそれ自体の否定、つまり numpy.concatenate(A,-1*A) に追加してから、一意でない行を見つけますが、混乱していますそこから必要な情報を抽出する方法について。また、配列はかなり大きい可能性があるため、それ自体に追加することはお勧めできません。

配列をループして、行インデックスが別の行インデックスの否定と等しいかどうかを確認するだけで正しい答えが得られますが、それには時間がかかります。numpy.unique と同じくらい速いものが欲しいです。

プロセスに違いがある場合は、 A からすべての重複行を既に削除しています。

4

6 に答える 6

0

あなたの配列Aはユニークだと言うので、これはどうですか?

import itertools as it

In [3]: idxs_comb = list(it.combinations(range(A.shape[0]), 2))
In [4]: rows_comb = it.combinations(A, 2)
In [5]: [idxs_comb[idx] for idx, pair in enumerate(rows_comb) if np.sum(pair) == 0]
Out[6]: [(0, 2), (1, 4)]
于 2017-11-25T22:55:16.503 に答える