- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 建立和運算元組
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 遍歷陣列
- NumPy - 陣列重塑
- NumPy - 連線陣列
- NumPy - 陣列堆疊
- NumPy - 陣列分割
- NumPy - 陣列扁平化
- NumPy - 陣列轉置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和操作
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步長
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列操作
- NumPy - 交換陣列的軸
- NumPy - 位元組交換
- NumPy - 複製和檢視
- NumPy - 元素級陣列比較
- NumPy - 陣列過濾
- NumPy - 連線陣列
- NumPy - 排序、搜尋和計數函式
- NumPy - 搜尋陣列
- NumPy - 陣列的並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O
- NumPy 排序和高階操作
- NumPy - 陣列排序
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 將值追加到陣列
- NumPy - 交換陣列的列
- NumPy - 將軸插入陣列
- NumPy 處理缺失資料
- NumPy - 處理缺失資料
- NumPy - 識別缺失值
- NumPy - 刪除缺失資料
- NumPy - 估算缺失資料
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合運算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
NumPy - 排序、搜尋和計數函式
NumPy 提供了各種用於對陣列中的元素進行排序、搜尋和計數的函式。這些函式對於資料操作和分析非常有用。
NumPy 提供了幾種排序演算法,每種演算法都有其自身的特點。以下是三種常見排序演算法的比較:
| kind | 速度 | 最壞情況 | 工作空間 | 穩定性 |
|---|---|---|---|---|
| 'quicksort' | 1 | O(n^2) | 0 | 否 |
| 'mergesort' | 2 | O(n*log(n)) | ~n/2 | 是 |
| 'heapsort' | 3 | O(n*log(n)) | 0 | 否 |
numpy.sort() 函式
sort() 函式返回輸入陣列的排序副本。它可以沿任何指定的軸對陣列進行排序,並支援不同的排序演算法。以下是語法:
numpy.sort(a, axis, kind, order)
其中,
| 序號 | 引數和描述 |
|---|---|
| 1 | a 要排序的陣列 |
| 2 | axis 要排序的陣列的軸。如果為 None,則陣列將被展平,並在最後一個軸上排序 |
| 3 | kind 預設為 quicksort |
| 4 | order 如果陣列包含欄位,則要排序的欄位的順序 |
示例
在以下示例中,我們分別使用預設方式和沿特定軸對二維 NumPy 陣列進行排序。我們還演示瞭如何根據特定欄位(例如“name”)對結構化陣列進行排序:
import numpy as np
# Create a 2D array
a = np.array([[3, 7], [9, 1]])
print("Our array is:",a)
# Default sort
print("Applying sort() function:",np.sort(a))
# Sort along axis 0
print("Sort along axis 0:",np.sort(a, axis=0))
# 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:",a)
print("Order by name:",np.sort(a, order='name'))
它將產生以下輸出:
Our array is:
[[3 7]
[9 1]]
Applying sort() function:
[[3 7]
[1 9]]
Sort along axis 0:
[[3 1]
[9 7]]
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() 函式對輸入陣列沿給定軸並使用指定的排序型別進行間接排序,並返回資料索引的陣列。此索引陣列用於構造排序陣列。
示例
在此示例中,我們使用 argsort() 函式檢索索引,即排序元素在原始陣列中的位置。使用這些索引,您可以重建排序陣列:
import numpy as np
# Create an array
x = np.array([3, 1, 2])
print("Our array is:",x)
# Get indices that would sort the array
y = np.argsort(x)
print("Applying argsort() to x:",y)
# Reconstruct the sorted array using the indices
print("Reconstruct original array in sorted order:",x[y])
# Reconstruct the original array using a loop
print("Reconstruct the original array using loop:")
for i in y:
print(x[i], end=' ')
它將產生以下輸出:
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() 函式
NumPy lexort() 函式使用一系列鍵執行間接排序。鍵可以看作電子表格中的列。該函式返回一個索引陣列,可以使用它來獲取排序資料。請注意,最後一個鍵恰好是排序的主鍵。
示例
在此示例中,我們使用 np.lexsort() 函式根據多個鍵對資料集進行排序,其中最後一個鍵“nm”是主要排序標準。然後使用排序索引透過組合名稱和相應的欄位來顯示排序資料:
import numpy as np
# Define keys
nm = ('raju', 'anil', 'ravi', 'amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
# Get indices for sorted order
ind = np.lexsort((dv, nm))
print("Applying lexsort() function:",ind)
# Use indices to get sorted data
print("Use this index to get sorted data:",[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() 函式
NumPy argmax() 和 argmin() 函式分別返回沿給定軸的最大和最小元素的索引。
示例
在此示例中,我們使用 np.argmax() 和 np.argmin() 函式查詢二維陣列中最大值和最小值的索引,包括展平陣列和沿特定軸的情況:
import numpy as np
# Create a 2D array
a = np.array([[30, 40, 70], [80, 20, 10], [50, 90, 60]])
print("Our array is:",a)
# Apply argmax() function
print("Applying argmax() function:",np.argmax(a))
# Index of maximum number in flattened array
print("Index of maximum number in flattened array:",a.flatten())
# Array containing indices of maximum along axis 0
print("Array containing indices of maximum along axis 0:")
maxindex = np.argmax(a, axis=0)
print(maxindex)
# Array containing indices of maximum along axis 1
print("Array containing indices of maximum along axis 1:")
maxindex = np.argmax(a, axis=1)
print(maxindex)
# Apply argmin() function
print("Applying argmin() function:")
minindex = np.argmin(a)
print(minindex)
# Flattened array
print("Flattened array:",a.flatten()[minindex])
# Flattened array along axis 0
print("Flattened array along axis 0:")
minindex = np.argmin(a, axis=0)
print(minindex)
# Flattened array along axis 1
print("Flattened array along axis 1:")
minindex = np.argmin(a, axis=1)
print(minindex)
輸出包括這些極值的索引,演示瞭如何在陣列中訪問和解釋這些位置:
Our array is: [[30 40 70] [80 20 10] [50 90 60]] 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() 函式返回輸入陣列中非零元素的索引。
示例
在下面的示例中,我們使用 nonzero() 函式檢索陣列“a”中非零元素的索引:
import numpy as np
a = np.array([[30,40,0],[0,20,10],[50,0,60]])
print ('Our array is:',a)
print ('Applying nonzero() function:',np.nonzero (a))
它將產生以下輸出:
Our array is: [[30 40 0] [ 0 20 10] [50 0 60]] 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:',x)
print ('Indices of elements > 3')
y = np.where(x > 3)
print (y)
print ('Use these indices to get elements satisfying the condition',x[y])
它將產生以下輸出:
Our array is: [[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]] 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:',x)
# define a condition
condition = np.mod(x,2) == 0
print ('Element-wise value of condition',condition)
print ('Extract elements using condition',np.extract(condition, x))
它將產生以下輸出:
Our array is: [[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]] Element-wise value of condition [[ True False True] [False True False] [ True False True]] Extract elements using condition [ 0. 2. 4. 6. 8.]