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

python

どうも、ちょげ(@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()を使います。

コメント

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