Numpy-sort-search-counting-functions

提供:Dev Guides
移動先:案内検索

NumPy-ソート、検索、カウント機能

NumPyでは、さまざまな並べ替え関連の機能を使用できます。 これらの並べ替え関数は、さまざまな並べ替えアルゴリズムを実装します。それぞれのアルゴリズムは、実行速度、最悪の場合のパフォーマンス、必要なワークスペース、およびアルゴリズムの安定性によって特徴付けられます。 次の表は、3つの並べ替えアルゴリズムの比較を示しています。

kind speed worst case work space stable
‘quicksort’ 1 O(n^2) 0 no
‘mergesort’ 2 O(n*log(n)) ~n/2 yes
‘heapsort’ 3 O(n*log(n)) 0 no

numpy.sort()

sort()関数は、入力配列のソートされたコピーを返します。 次のパラメータがあります-

numpy.sort(a, axis, kind, order)

どこで、

Sr.No. Parameter & Description
1

a

ソートされる配列

2

axis

配列が並べ替えられる軸。 存在しない場合、配列は平坦化され、最後の軸でソートされます

3

kind

デフォルトはクイックソートです

4

order

配列にフィールドが含まれる場合、ソートされるフィールドの順序

import numpy as np
a = np.array([[print 'Our array is:'
print a
print '\n'

print 'Applying sort() function:'
print np.sort(a)
print '\n'

print 'Sort along axis 0:'
print np.sort(a, axis = 0)
print '\n'

# Order parameter in sort function
dt = np.dtype([('name', 'S10'),('age', int)])
a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt)

print 'Our array is:'
print a
print '\n'

print 'Order by name:'
print np.sort(a, order = 'name')

それは次の出力を生成します-

Our array is:
[[Applying sort() function:
[[Sort along axis 0:
[[Our array is:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]

Order by name:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

numpy.argsort()

  • numpy.argsort()*関数は、指定された軸に沿って入力配列で間接ソートを実行し、指定された種類のソートを使用してデータのインデックスの配列を返します。 このインデックス配列は、ソートされた配列を作成するために使用されます。

import numpy as np
x = np.array([3, 1, 2])

print 'Our array is:'
print x
print '\n'

print 'Applying argsort() to x:'
y = np.argsort(x)
print y
print '\n'

print 'Reconstruct original array in sorted order:'
print x[y]
print '\n'

print 'Reconstruct the original array using loop:'
for i in y:
   print x[i],

それは次の出力を生成します-

Our array is:
[3 1 2]

Applying argsort() to x:
[1 2 0]

Reconstruct original array in sorted order:
[1 2 3]

Reconstruct the original array using loop:
1 2 3

numpy.lexsort()

関数は、キーのシーケンスを使用して間接ソートを実行します。 キーはスプレッドシートの列として見ることができます。 この関数は、インデックスの配列を返します。これを使用して、ソートされたデータを取得できます。 最後のキーがたまたま主キーであることに注意してください。

import numpy as np

nm = ('raju','anil','ravi','amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv,nm))

print 'Applying lexsort() function:'
print ind
print '\n'

print 'Use this index to get sorted data:'
print [nm[i] + ", " + dv[i] for i in ind]

それは次の出力を生成します-

Applying lexsort() function:
[3 1 0 2]

Use this index to get sorted data:
['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

NumPyモジュールには、配列内を検索するための多くの関数があります。 最大値、最小値、および特定の条件を満たす要素を見つけるための関数が利用できます。

numpy.argmax()およびnumpy.argmin()

これらの2つの関数は、指定された軸に沿ってそれぞれ最大要素と最小要素のインデックスを返します。

import numpy as np
a = np.array([[print 'Our array is:'
print a
print '\n'

print 'Applying argmax() function:'
print np.argmax(a)
print '\n'

print 'Index of maximum number in flattened array'
print a.flatten()
print '\n'

print 'Array containing indices of maximum along axis 0:'
maxindex = np.argmax(a, axis = 0)
print maxindex
print '\n'

print 'Array containing indices of maximum along axis 1:'
maxindex = np.argmax(a, axis = 1)
print maxindex
print '\n'

print 'Applying argmin() function:'
minindex = np.argmin(a)
print minindex
print '\n'

print 'Flattened array:'
print a.flatten()[minindex]
print '\n'

print 'Flattened array along axis 0:'
minindex = np.argmin(a, axis = 0)
print minindex
print '\n'

print 'Flattened array along axis 1:'
minindex = np.argmin(a, axis = 1)
print minindex

それは次の出力を生成します-

Our array is:
[[Applying argmax() function:
7

Index of maximum number in flattened array
[30 40 70 80 20 10 50 90 60]

Array containing indices of maximum along axis 0:
[1 2 0]

Array containing indices of maximum along axis 1:
[2 0 1]

Applying argmin() function:
5

Flattened array:
10

Flattened array along axis 0:
[0 1 1]

Flattened array along axis 1:
[0 2 0]

numpy.nonzero()

  • numpy.nonzero()*関数は、入力配列内の非ゼロ要素のインデックスを返します。

import numpy as np
a = np.array([[print 'Our array is:'
print a
print '\n'

print 'Applying nonzero() function:'
print np.nonzero (a)

それは次の出力を生成します-

Our array is:
[[Applying nonzero() function:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))

numpy.where()

where()関数は、指定された条件が満たされる入力配列の要素のインデックスを返します。

import numpy as np
x = np.arange(9.).reshape(3, 3)

print 'Our array is:'
print x

print 'Indices of elements > 3'
y = np.where(x > 3)
print y

print 'Use these indices to get elements satisfying the condition'
print x[y]

それは次の出力を生成します-

Our array is:
[[Indices of elements > 3
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))

Use these indices to get elements satisfying the condition
[ 4. 5. 6. 7. 8.]

numpy.extract()

  • extract()*関数は、任意の条件を満たす要素を返します。
import numpy as np
x = np.arange(9.).reshape(3, 3)

print 'Our array is:'
print x

# define a condition
condition = np.mod(x,2) == 0

print 'Element-wise value of condition'
print condition

print 'Extract elements using condition'
print np.extract(condition, x)

それは次の出力を生成します-

Our array is:
[[Element-wise value of condition
[[True False True]
 [False True False]
 [ True False True]]

Extract elements using condition
[ 0. 2. 4. 6. 8.]