list(map(list,zip(*a)))
在Python的numpy中,對(duì)類(lèi)似array=[[1,2,3],[4,5,6],[7,8,9]];的二維數(shù)組的轉(zhuǎn)置,就一句話array.T。其實(shí)不使用numpy,單純使用Python,代碼也不長(zhǎng),同樣也是一行。不過(guò)在此之前,先說(shuō)明Python中map函數(shù)與zip(*)的使用。
一、map函數(shù)
首先Python中的map函數(shù)是很簡(jiǎn)單的。意為將第二個(gè)參數(shù)(一般是數(shù)組)中的每一個(gè)項(xiàng),處理為第一個(gè)參數(shù)的類(lèi)型。比如如下的代碼,將a這個(gè)list的每一項(xiàng)都從int類(lèi)型轉(zhuǎn)化為str類(lèi)型。
#-*-coding:utf-8-*-
a=[1,2,3];
print map(str,a);
運(yùn)行結(jié)果如下:
而如下的數(shù)組,則對(duì)a這個(gè)二維數(shù)組中的每一個(gè)項(xiàng)的一維數(shù)組進(jìn)行求和操作,最后得出來(lái)自然是一個(gè)一維數(shù)組,因?yàn)槊恳粋€(gè)項(xiàng)的一維數(shù)組,轉(zhuǎn)化為一個(gè)int。
#-*-coding:utf-8-*-
a=[[1,3,4],[2,3,2]];
print map(sum,a);
運(yùn)行結(jié)果如下:
二、zip(*)
在《【Python】用zip函數(shù)求歐氏距離、余弦相似度》(點(diǎn)擊打開(kāi)鏈接)中已經(jīng)介紹了zip的使用,
?
比如下述的一段代碼:
#-*-coding:utf-8-*-
x=[1,2,3];
y=[4,5,6];
z=[7,8,9];
print zip(x,y,z);
運(yùn)行結(jié)果如下:
?
意思是取各個(gè)list的第x項(xiàng),作為返回的二維數(shù)組的第x項(xiàng)中的一維數(shù)組中的元素。
其實(shí)zip還是反過(guò)來(lái)會(huì)這個(gè)二維數(shù)組操作,但要注意寫(xiě)成zip(*),表示這是一個(gè)zip的逆操作。
比如下述的一段代碼:
# -*-coding:utf-8-*-
array=[[1,4,7],[2,5,8],[3,6,9]];
x,y,z=zip(*array);
print x,y,z;
xyz的值分別如下所示,恰好與zip函數(shù)形成一個(gè)逆操作。
三、python中二維數(shù)組的轉(zhuǎn)置
這與數(shù)組轉(zhuǎn)置有什么相關(guān)呢?
注意到,如果zip(*array)不經(jīng)過(guò)x,y,z=zip(*array);拆分成x,y,z三個(gè)變量,那么[[1,4,7],[2,5,8],[3,6,9]];被zip(*array)之后的結(jié)果恰好是[(1, 2, 3), (4, 5, 6), (7, 8, 9)],剛好形成一個(gè)轉(zhuǎn)置的關(guān)系。這對(duì)于所有array=[[1,2,3],[4,5,6],[7,8,9]];的二維數(shù)組都是一樣的,不信可以試試。
當(dāng)然[(1, 2, 3), (4, 5, 6), (7, 8, 9)]還不是我們需要的最后的結(jié)果,
因?yàn)橹皇且粋€(gè)存放tuple的list,我們要保持原來(lái)list是存list的一致性,所以要應(yīng)用到上方的map函數(shù)。
因此對(duì)于一個(gè)數(shù)組的轉(zhuǎn)置,代碼如下:
# -*-coding:utf-8-*-
array = [[1, 4], [2, 5], [3, 6]];
print map(list, zip(*array));
運(yùn)行結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的list(map(list,zip(*a)))的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习:贝叶斯分类器,朴素贝叶斯,拉普
- 下一篇: 数据预处理:原始数据集快速分类的方法,n