一位朋友突然問我說,numpy中,如何找出一維數(shù)組和二維數(shù)組(矩陣)中的mode,我當(dāng)然說我知道怎么找啊,等我回家后再寫一下代碼就知道了。。。,心里在想,numpy和pandas的常用函數(shù)和方法就那些,好像沒有直接找出1個(gè)mode或多個(gè)mode的方法?于是就嘗試著先不去stackoverflow找解法,自己動(dòng)手先寫一個(gè)自定義函數(shù),看是否能實(shí)現(xiàn)這個(gè)功能,思路是這樣的,先從最簡單的數(shù)據(jù)結(jié)構(gòu)開始,將numpy的一維數(shù)組,轉(zhuǎn)成Python list,再使用counter配合循環(huán)計(jì)算頻數(shù),循環(huán)2次后再兩兩比較,然后取出最大值,ok,寫好了,親測有效,請(qǐng)見下圖:

可是我這個(gè)方法太笨了,而且也不適用于二維數(shù)組,甚至要使用嵌套的for循環(huán)才能實(shí)現(xiàn)對(duì)二維數(shù)組的操作,太費(fèi)腦子了,身為宇宙第一語言的Python,一定會(huì)有更簡潔的方法,stackoverflow搜下,果然有的,嘿嘿,原來用scipy庫的stats的這個(gè)統(tǒng)計(jì)模塊,就可實(shí)現(xiàn),代碼如下:

另外,我原先寫的代碼,也可以優(yōu)化成以下這幾行,使用numpy的bincount()搭配argmax()即可,請(qǐng)見下面優(yōu)化后的代碼(此方法不適用于二維數(shù)組):

但事實(shí)上,還有更為方便的方法,能更快找出mode,那就是將一維數(shù)組轉(zhuǎn)成Pandas的Series,將二維數(shù)組轉(zhuǎn)成Pandas的DataFrame,然后調(diào)用Pandas的mode()方法,一切搞定,就幾行代碼而已,比如df.mode(),以下為重構(gòu)后的代碼:

