どうも、ちょげ(@chogetarou)です。
PythonのNumpy配列(Array)の列を絶対値でソートする方法を紹介します。
方法
昇順
Numpy配列の列を絶対値で昇順にソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。を使います。
まず、np.argsort()を呼び出します。
np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」に「0」を指定します。
index = np.argsort(np.abs(array), axis=0)
そして、numpy.take_along_axis()を呼び出します。
take_along_axis()の第1引数にnumpy配列、第2引数に上記のnp.argsort()の結果を指定します。
take_along_axis()の引数「axis」に「0」を指定します。
result = np.take_along_axis(nums, index, axis=0)
上記の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=0)
result = np.take_along_axis(nums, index, axis=0)
print(result)
#[[ 3 -1 -4]
# [ 8 -2 -6]
# [-9 -5 7]]
降順
Numpy配列の列を絶対値で降順にソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。を使います。
まず、np.argsort()を呼び出します。
np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」に「0」を指定します。
index = np.argsort(np.abs(array), axis=0)
次に、numpy.take_along_axis()を呼び出します。
take_along_axis()の第1引数にnumpy配列、第2引数に上記のnp.argsort()の結果を指定します。
take_along_axis()の引数「axis」に「1」を指定します。
そして、numpy.flipud()でtake_along_axis()の結果の列を反転します。
result = np.flipud(np.take_along_axis(nums, index, axis=0))
上記のnumpy.flipud()は、numpy配列の列を絶対値で降順にソートした結果を返します。
使用例
import numpy as np
nums = np.array([[8, -5, -6],
[-9, -2, 7],
[3, -1, -4],] )
index = np.argsort(np.abs(nums), axis=0)
result = np.flipud(np.take_along_axis(nums, index, axis=0))
print(result)
#[[-9 -5 7]
# [ 8 -2 -6]
# [ 3 -1 -4]]
まとめ
Numpy配列の列を絶対値でソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。
コメント