Numpy|須要信手拈來的功能

這是一篇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]   # 返回值是拼接後結果


而有些接口,直接將參數值修改,無返回值或其餘返回值,這種須要區別對待。



算法channel會有系統地,認真地推送:基礎算法/機器學習/深度學習/spark/tensorflow等全棧內容。期待您的參與!QQ交流羣: 646901659 或進入公衆號界面->導讀系列下,進入微信討論羣。

本文分享自微信公衆號 - Python與算法社區(alg-channel)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索