數組的操作
基本索引array[ ]
一. [一維(由0開始數)][二維(由0開始數)]
二. [負號表示由後往回數第幾個(由1開始數)]
三. 由索引修改數組的值
四.返回數組中的非零索引的展開。
numpy.flatnonzero
numpy.nonzero
切片array[::]
-
切片array[::]
使用切片時並非重新複製資料,而是傳回子陣列的視圖,想重新複製出資料須使用array[::].copy()。
注意:row、column都以0為起始列。
注意:[:]以及[::]的不同,[::-1]第3個值-1表示翻轉。
-
切片array[[ ]]
-
mask與條件切片
條件切片會傳回一個bool數組,也可以搭配numpy.flatnonzero及numpy.where索引指定條件的切片。
什麼是掩碼數組?
mask
在許多情況下,數據集可能不完整或因無效數據的存在而受到污染。例如,傳感器可能無法記錄數據或記錄無效值。該numpy.ma
模塊通過引入掩碼數組提供了一種解決此問題的便捷方法。
-
查找NAN值
np.nan需要使用numpy.isnan查詢。
重塑
-
np.reshape()
-
np.ndarray.flatten(order='C')
order:'C' 按行,'F' 按列,'A' 原順序展開成一維。
-
np.transpose(arr, axes)
與reshape不同,依照原本維度改變形狀。
arr:要轉置的數組
axes:整數的列表,對應維度,默認所有維度都會翻轉。
- numpy.matrix
- numpy.asarray
轉置(翻轉)
-
np.transpose(arr, axes)
arr:要轉置的數組
axes:整數的列表,對應維度,默認所有維度都會翻轉。
- ndarray.T
組合與分割
- 串接:多維數組連接的過程中要注意連接軸的大小相同。
- 一維
- 二維
- 分割
-
numpy.split(ary, indices_or_sections, axis)
ary:被分割的輸入數組
indices_or_sections:此參數為整數,表示要分割為幾分等大小數組。此參數為一維數組,則表示要分割的位置。
axis:默認為 0
重複
添加和插入和刪除
- 添加
-
np.append(arr, values, axis)
添加數組中某個位置或某軸的值
arr:輸入數組
values:要添加的值
axis:沿著它完成操作的軸。如果未提供,則輸入數組會被展開
-
插入
插入數組中某個位置或某軸的值
-
numpy.insert(arr, obj, values, axis)
arr:輸入數組
obj:在其之前插入值的索引
values:要插入的值
axis:沿著它插入的軸,如果未提供,則輸入數組會被展開
- 刪除
-
Numpy.delete(arr, obj, axis)
刪除數組中某個位置或某軸的值
arr:輸入數組
obj:可以使用切片,整數或者整數數組,表示要從輸入數組刪除的子數組
axis:沿著它刪除給定子數組的軸,如果未提供,則輸入數組會被展開
-
numpy.unique(arr, return_index, return_inverse, return_counts)
結果為刪除重複(重覆)數組,並排列。
arr:輸入數組,如果不是一維數組則會展開
return_index:如果為true,返回結果(新數組)以及結果對應原數組的原數組索引
return_inverse:如果為true,返回結果以及結果的新數組對應原數組的新數組索引
return_counts:如果為true,返回結果以及結果的重複次數
網格
-
np.meshgrid()
通常使用在數據的矢量化上。它適用於生成網格型數據,可以接受兩個一維數組生成兩個二維矩陣,對應兩個數組中所有的(x,y)對。 -
np.mgrid()
與meshgrid類似,但可以處理多維。
-
meshgrid
-
mgrid
排序
NumPy中提供了各種排序相關功能。這些排序函數實現不同的排序算法,每個排序算法的特徵在於執行速度,最壞情況性能,所需的工作空間和算法的穩定性。下表顯示了三種排序算法的比較。
種類 | 速度 | 最壞情況 | 工作空間 | 穩定性 |
---|---|---|---|---|
'quicksort'(快速排序) | 1 | O(n^2) | 0 | 否 |
'mergesort'(歸併排序(混排)) | 2 | O(n*log(n)) | ~n/2 | 是 |
'heapsort'(堆排序) | 3 | O(n*log(n)) | 0 | 否 |
-
numpy.sort(a, axis, kind, order)
將數組進行排序,返回排序好的數組
a:要排序的陣列
axis:沿著它排序陣列的軸,如果沒有陣列會被展開,沿著最後的軸排序
kind:默認為'quicksort'(快速排序)
order:如果陣列dtype包含'names',則是要排序dtype的'names'
-
numpy.argsort(a, axis, kind, order)
將數組進行排序,返回排序好結果對應原數組的原數組索引
a:要排序的陣列
axis:沿著它排序陣列的軸,如果沒有陣列會被展開,沿著最後的軸排序
kind:默認為'quicksort'(快速排序)
order:如果陣列dtype包含'names',則是要排序dtype的'names'
-
numpy.partition()
選定一個pivot只進行一次的快速排序,以pivot進行分區。輸入pivot為排序後的第幾個數,傳回分區好的數組。
-
numpy.argpartition()
選定一個pivot只進行一次的快速排序,以pivot進行分區。輸入pivot為排序後的第幾個數,傳回分區好的結果對應原數組的原數組索引。
-
numpy.searchsorted(a, v, side='left', sorter=None)
a:所需排序的數組
v:待查詢索引的元素值
side:查詢索引時的方向,其中:′left′為從左至右;′right′為從右至左
sorter:一個字符串或列表,可以設置按照某個屬性進行排序
利用searchsorted特性可以用來分組以及計數
計數
- 計數
-
一般我們常用使用Python內建collections.Counter
-
-