Numpy: argsortは多次元配列では機能しません

作成日 2014年05月19日  ·  12コメント  ·  ソース: numpy/numpy

次のコードを検討してください。
a = np.random.random([5,5])
ind = np.argsort(a、axis = 1)
a_sorted = a [ind]
np.sort(a、axis = 1)

これで、a_sortedとaの両方が1軸に沿ってソートされるはずです。 しかし、形さえもう同じではありません。 a_sortedが(5,5,5)であるのに対し、aは(5,5)のままです。 これが意図された動作である場合、誰かが理由を教えてもらえますか?

最も参考になるコメント

実際に出力を使用してND配列をソートする方法の例があればよいでしょう。

a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]よりも読みやすい解決策があればそれも良いでしょう

全てのコメント12件

argsort()は正常に機能していますが、インデックス作成は期待どおりに機能しません。

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing

これを試して:

a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)

私も同じように混乱しました。 ドキュメントには具体的に次のように記載されています。

戻り値
index_array:ndarray、int
指定された軸に沿ってaを並べ替えるインデックスの配列。
つまり、 a[index_array]は、ソートされたaます。

これは1D配列にのみ適用されます。 これがNDアレイには当てはまらないことを指定するために、ドキュメントを拡張する必要がありますか?

@lzkelleyはい、ドキュメントを改善するためのパッチは大歓迎です。

@shoyerかっこいい、PRして更新します

実際に出力を使用してND配列をソートする方法の例があればよいでしょう。

a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]よりも読みやすい解決策があればそれも良いでしょう

たぶん@sebergはそれを彼のインデックス関数の追加の1つにすることができます。

インデックス作成に明らかに適合しているとは思いません。おそらく、ピック関数などの方が簡単に一致します。

新しい機能の場合は+1。

argsortsortとは対照的に)の目的全体がインデックス作成に使用されるのではありませんか?

argsortは、軸に沿って並べ替えるためのインデックスを提供しますが、実際には、インデックスを使用してその軸に沿って並べ替えるのは、不必要に冗長に思えます。 私が気付いていないもっと簡単な方法がない限り。

ピック機能などは、おそらくより簡単に一致します。

これは#8708です

このページは役に立ちましたか?
0 / 5 - 0 評価