排序
numpy的排序函數
sort函數返回排序后的數組
lexsort函數根據鍵值的字典序進行排序
argsort函數返回數組排序后的下標
ndarray類的sort方法可以對數組進行原地排序
msort函數沿着第一個軸排序
sort_complex函數對復數按照先實部后虛部的順序進行排序
Key_Function
lexsort函數根據鍵值的字典序進行排序
將兩個數組構成的元組, 分別取出對應下標的元素, 第一個數組的看做key, 第二個數組看做value
然后按照value進行排序, 返回排序后的數組下標
字典序就是按value進行排序
Code
import numpy as np import datetime def datestr2num(s): s = s.decode("utf-8") return datetime.datetime.strptime(s, "%d-%m-%Y").toordinal() dates, closes = np.loadtxt("AAPL.csv", delimiter=',', usecols=(1, 5), converters={1:datestr2num}, unpack=True) indices = np.lexsort((dates, closes)) print(indices) ''' [ 0 16 1 17 18 4 3 2 5 28 19 21 15 6 29 22 27 20 9 7 25 26 10 8 14 11 23 12 24 13] ''' l=[(datetime.date.fromordinal(int(dates[i])), closes[i]) for i in indices] print(l) ''' [(datetime.date(2011, 1, 28), 336.10000000000002), (datetime.date(2011, 2, 22), 338.61000000000001), (datetime.date(2011, 1, 31), 339.31999999999999), (datetime.date(2011, 2, 23), 342.62), (datetime.date(2011, 2, 24), 342.88), (datetime.date(2011, 2, 3), 343.44), (datetime.date(2011, 2, 2), 344.31999999999999), (datetime.date(2011, 2, 1), 345.02999999999997), (datetime.date(2011, 2, 4), 346.5), (datetime.date(2011, 3, 10), 346.67000000000002), (datetime.date(2011, 2, 25), 348.16000000000003), (datetime.date(2011, 3, 1), 349.31), (datetime.date(2011, 2, 18), 350.56), (datetime.date(2011, 2, 7), 351.88), (datetime.date(2011, 3, 11), 351.99000000000001), (datetime.date(2011, 3, 2), 352.12), (datetime.date(2011, 3, 9), 352.47000000000003), (datetime.date(2011, 2, 28), 353.20999999999998), (datetime.date(2011, 2, 10), 354.54000000000002), (datetime.date(2011, 2, 8), 355.19999999999999), (datetime.date(2011, 3, 7), 355.36000000000001), (datetime.date(2011, 3, 8), 355.75999999999999), (datetime.date(2011, 2, 11), 356.85000000000002), (datetime.date(2011, 2, 9), 358.16000000000003), (datetime.date(2011, 2, 17), 358.30000000000001), (datetime.date(2011, 2, 14), 359.18000000000001), (datetime.date(2011, 3, 3), 359.56), (datetime.date(2011, 2, 15), 359.89999999999998), (datetime.date(2011, 3, 4), 360.0), (datetime.date(2011, 2, 16), 363.13)] '''
對復數進行排序
復數包含實數部分和虛數部分
NumPy中有復數類型, 使用兩個浮點數來表示復數.
Key_Function
sort_complex函數對復數進行排序, 按照先實部后虛部的順序排序
Code
import numpy as np np.random.seed(42) # 隨機數種子, 使用隨機數種子, 不管參數如何, 都會生成固定順序的隨機數數組 # 參數只是起始隨機數在隨機數數組中的位置 # 同一個隨機數種子, 反復取隨機數, 肯定結果是不同的 # 可能因為所選取的隨機數在隨機數組中下標在遞增 complex_numbers = np.random.random(5) + 1j * np.random.random(5) print(complex_numbers) ''' [ 0.37454012+0.15599452j 0.95071431+0.05808361j 0.73199394+0.86617615j 0.59865848+0.60111501j 0.15601864+0.70807258j] ''' print(np.sort_complex(complex_numbers)) ''' [ 0.15601864+0.70807258j 0.37454012+0.15599452j 0.59865848+0.60111501j 0.73199394+0.86617615j 0.95071431+0.05808361j] '''
numpy數組中搜索
argmax函數返回數組中最大值對應的下標
a = np.array([2, 4, 8]) np.argmax(a) # 2
nanargmax函數, 會忽略NaN值
b = np.array([np.nan, 2, 4]) np.nanargmax(b) # 2
argmin和nanargmin函數, 返回數組中最小值對應的下標
argwhere函數根據搜索條件搜索非零的元素, 並分組返回對應的下標
a = np.array([2, 4, 8]) np.argwhere(a <= 4) ''' [[0] [1]] '''
searchsort函數可以為指定的插入值尋找維持數組排序的索引位置
extract函數返回滿足指定條件的數組元素
Key_Function
searchsorted函數, 返回一個索引位置, 將元素插入這個位置的話, 不改變原數組的有序性
Code
import numpy as np a = np.arange(5) print(a) # [0 1 2 3 4] indices = np.searchsorted(a, [-2, 7]) print(indices) # [0 5] print(np.insert(a, indices, [-2, 7])) # [-2 0 1 2 3 4 7]
numpy中數組元素抽取
Key_Function
extract函數可以根據某個條件從數組中抽取元素.
這個函數和where函數相似
nonzero函數專門用來抽取非零的數組元素
Code
import numpy as np a = np.arange(7) print(a) # [0 1 2 3 4 5 6] condition = (a % 2) == 0 print(condition) # [ True False True False True False True] print(np.extract(condition, a)) # 指定了布爾條件從數組中抽取偶數元素 # [0 2 4 6] print(np.nonzero(a)) # (array([1, 2, 3, 4, 5, 6]),)
