どうも、ちょげ(@chogetarou)です。
配列(Array)を絶対値でソートする方法を紹介します。
リスト(List)の場合

昇順
リスト(List)を絶対値で昇順にソートする方法は、2つあります。
sorted()関数
1つは、sorted()関数を使う方法です。
まず、sorted()関数を呼び出します。
そして、sorted()関数の第1引数にリスト、引数「key」に「abs」を指定します。
result = sorted(list, key=abs)
上記のsorted()関数は、第1引数のリストを昇順にソートした新しいリストを返します。
使用例
numbers = [4, -2, 5, -3, 1]
result = sorted(numbers, key=abs)
print(result) #[1, -2, -3, 4, 5]
sort()メソッド
もう1つは、sort()メソッドを使う方法です。
具体的には、リストからsort()メソッドを呼び出します。
sort()メソッドの引数「key」に「abs」を指定します。
list.sort(key=abs)
引数「key」に「abs」を指定したsort()メソッドは、呼び出したリストを絶対値で昇順にソートします。
使用例
numbers = [4, -2, 5, -3, 1]
numbers.sort(key=abs)
print(numbers) #[1, -2, -3, 4, 5]
降順
リスト(List)を絶対値で降順にソートする方法は、2つあります。
sorted()関数
1つは、sorted()関数を使う方法です。
まず、sorted()関数を呼び出します。
sorted()関数の第1引数にリストを指定します。
そして、sorted()関数の引数「key」に「abs」、引数「reverse」に「True」を指定します。
result = sorted(list, key=abs, reverse=True)
上記のsorted()関数は、第1引数のリストを降順にソートした新しいリストを返します。
使用例
numbers = [4, -2, 5, -3, 1]
result = sorted(numbers, key=abs, reverse=True)
print(result) #[5, 4, -3, -2, 1]
sort()メソッド
もう1つは、sort()メソッドを使う方法です。
具体的には、リストからsort()メソッドを呼び出します。
sort()メソッドの引数「key」に「abs」、引数「reverse」に「True」を指定します。
list.sort(key=abs, reverse=True)
上記のsort()メソッドは、呼び出したリストを絶対値で降順にソートします。
使用例
numbers = [4, -2, 5, -3, 1]
numbers.sort(key=abs, reverse=True)
print(numbers) #[5, 4, -3, -2, 1]
Array.arrayの場合
Array.arrayを絶対値でソートするには、sorted()関数を使います。
昇順
Array.arrayを絶対値で昇順にソートするには、まず、sorted()関数を呼び出します。
sorted()関数の第1引数にArray.array、引数「key」に「abs」を指定します。
そして、sorted()の戻り値をarray.array()の第2引数に指定します。
result = array.array('t', sorted(list, key=abs))
上記のコードは、sorted()関数の第1引数のarray.arrayを絶対値で昇順にソートした新しいArray.arrayを生成します。
使用例
import array
numbers = array.array('i', [-5, 2, -4, 1, -3])
result = array.array('i', sorted(numbers, key=abs))
print(result) #array('i', [1, 2, -3, -4, -5])
降順
リスト(List)を絶対値で降順にソートするには、まず、sorted()関数を呼び出します。
sorted()関数の第1引数にArray.array、引数「key」に「abs」、引数「reverse」に「True」を指定します。
そして、sorted()の戻り値をarray.array()の第2引数に指定します。
result = array.array('t', sorted(list, key=abs, reverse=True))
上記のコードは、sorted()関数の第1引数のarray.arrayを絶対値で降順にソートした新しいArray.arrayを生成します。
使用例
import array
numbers = array.array('i', [-5, 2, -4, 1, -3])
result = array.array('i', sorted(numbers, key=abs, reverse=True))
print(result) #array('i', [-5, -4, -3, 2, 1])
Numpy配列の場合
Numpy配列の場合は、np.argsort()とnp.take_along_axis()を使います。
昇順
Numpy配列を昇順にソートするには、まず、np.argsort()を呼び出します。
np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」にNoneを指定します。
index = np.argsort(np.abs(array), axis=None)
次に、numpy.take_along_axis()を呼び出します。
take_along_axis()の第1引数にnumpy配列、第2引数にnp.argsort()の結果を指定します。
引数「axis」にNoneを指定します。
そして、take_along_axis()からreshape()を呼び出し、引数にnumpy配列の形状を指定します。
result = np.take_along_axis(array, index, axis=None).reshape(array.shape)
上記のnumpy.take_along_axis().reshape()は、numpy配列を絶対値でソートした結果を返します。
使用例
import numpy as np
nums = np.array([[8, -5, -6],
[-9, -2, 7],
[3, -1, -4],] )
index = np.argsort(np.abs(nums), axis=None)
result = np.take_along_axis(nums, index, axis=None).reshape(nums.shape)
print(result)
#[[-1 -2 3]
# [-4 -5 -6]
# [ 7 8 -9]]
降順
Numpy配列を降順にソートするには、まず、np.argsort()を呼び出し、末尾に[::-1]を付けます。
np.argsort()の第1引数で引数に配列を指定したnumpy.abs()、引数「axis」にNoneを指定します。
index = np.argsort(np.abs(array), axis=None)[::-1]
次に、numpy.take_along_axis()を呼び出します。
take_along_axis()の第1引数にnumpy配列、第2引数に上記のnp.argsort()の結果を指定します。
引数「axis」にNoneを指定します。
そして、take_along_axis()からreshape()を呼び出し、引数にnumpy配列の形状を指定します。
result = np.take_along_axis(array, index, axis=None).reshape(array.shape)
上記のnumpy.take_along_axis().reshape()は、numpy配列を絶対値で降順にソートした結果を返します。
使用例
import numpy as np
nums = np.array([[8, -5, -6],
[-9, -2, 7],
[3, -1, -4],] )
index = np.argsort(np.abs(nums), axis=None)[::-1]
result = np.take_along_axis(nums, index, axis=None).reshape(nums.shape)
print(result)
#[[-9 8 7]
# [-6 -5 -4]
# [ 3 -2 -1]]
まとめ
リスト(List)を絶対値でソートするには、次の2つの方法のいずれかを使います。
- sorted()関数を使う方法
- sort()メソッドを使う方法
Array.arrayを絶対値でソートするには、sorted()関数を使います。
Numpy配列をソートするには、numpy.argsort()とnumpy.take_along_axis()を使います。
コメント