這是一篇Numpy中常常使用的API的不徹底總結,歡迎補充和指導。算法
01
數組
類型轉化微信
凡是使用Numpy的小夥伴,無不遇到類型轉化這個問題,而且常常須要經過調試才得以修正。機器學習
爲何這個問題如此棘手?編輯器
請看, arr = np.array([9,10,'2',10],只有一個元素爲str類型,那麼numpy會當即將全部元素轉爲str型。學習
在工做中,咱們常常須要添加整列添加元素,這種操做可能會改變原來元素的類型。若是,你的操做涉及到數值上的加減乘除,添加元素後意外變爲str型後,就會拋出異常。flex
這時候,須要進行顯示類型轉化:url
arr = arr.astype(np.float64) # 直接轉化爲float64類型spa
02
.net
維數變化
有時候須要將多維數組變爲更小維的數組,好比經常使用的二維下降到一維。
以下的二維數組:
array([[ 5, 2], [10, 8], [ 3, 1]])
調用:
arr2 = arr.flatten()
變爲1維:
array([ 5, 2, 10, 8, 3, 1])
03
排序
在numpy中,如何根據某列對多維數組正確排序,藉助 lexsort
以下的二維數組myarray:
[['5', '4', '9', '10'], ['23', '7', '3', '5'], ['7', '3', '13', '4']
按照第3列從小到大排序:
myarray[np.lexsort(myarray[:,::-3].T)]
結果:
[['23', '7', '3', '5'], ['5', '4', '9', '10'], ['7', '3', '13', '4']]
04
一個帶雷的去重方法
根據某種重複定義,去重,下面提供一種去重方法,可是它會帶來另外一個陷阱。
c=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))
規定(1,2)元包重複,想拿掉最後一個。
提供一種一行代碼去重的方法:
np.array(list(set([tuple(t) for t in c])))
結果:
[[1, 2], [3, 4], [5, 6], [7, 8] ]
這裏類型變爲list的了,你們忽略這個問題。
我想說的是另外一個問題,這個結果貌似運來元素的順序未變化。
但,由於經過set類型去重後,原來元素的順序不給予保證,若是對順序有要求的數據,通過這種去重後,會變得和原來的排序後的順序不一致。這是須要注意的!
05
返回值
不光Numpy中,在引用任何其餘庫,必定要注意調用的接口影響的是參數,仍是返回值。
rslt = np.c_[arr_a,arr_b] # 返回值是拼接後結果
而有些接口,直接將參數值修改,無返回值或其餘返回值,這種須要區別對待。
本文分享自微信公衆號 - Python與算法社區(alg-channel)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。