[Python]Numpy配列(Array)の行を絶対値でソートするには?

python

どうも、ちょげ(@chogetarou)です。

PythonのNumpy配列(Array)の行を絶対値でソートする方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

昇順

Numpy配列の行を絶対値で昇順にソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。を使います。

まず、np.argsort()を呼び出します。

np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」に「1」を指定します。

index = np.argsort(np.abs(array), axis=1)

そして、numpy.take_along_axis()を呼び出します。

take_along_axis()の第1引数にnumpy配列、第2引数に上記のnp.argsort()の結果を指定します。

take_along_axis()の引数「axis」に「1」を指定します。

result = np.take_along_axis(nums, index, axis=1)

上記のnumpy.fliplr()は、numpy配列の行を絶対値で昇順にソートした結果を返します。

使用例

import numpy as np

nums = np.array([[8, -5, -6],  
                [-9, -2, 7], 
                [3, -1, -4],] )

index = np.argsort(np.abs(nums), axis=1)

result = np.take_along_axis(nums, index, axis=1)

print(result)
#[[-5 -6  8]
# [-2  7 -9]
# [-1  3 -4]]

降順

Numpy配列の行を絶対値で降順にソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。を使います。

まず、np.argsort()を呼び出します。

np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」に「1」を指定します。

index = np.argsort(np.abs(array), axis=1)

次に、numpy.take_along_axis()を呼び出します。

take_along_axis()の第1引数にnumpy配列、第2引数に上記のnp.argsort()の結果を指定します。

take_along_axis()の引数「axis」に「1」を指定します。

そして、numpy.fliplr()でtake_along_axis()の結果の行を反転します。

result = np.fliplr(np.take_along_axis(nums, index, axis=1))

上記のnumpy.fliplr()は、numpy配列の行を絶対値で降順にソートした結果を返します。

使用例

import numpy as np

nums = np.array([[8, -5, -6],  
                [-9, -2, 7], 
                [3, -1, -4],] )

index = np.argsort(np.abs(nums), axis=1)

result = np.fliplr(np.take_along_axis(nums, index, axis=1))

print(result)
#[[ 8 -6 -5]
# [-9  7 -2]
# [-4  3 -1]]
スポンサーリンク

まとめ

Numpy配列の行を絶対値でソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。

コメント

タイトルとURLをコピーしました