numpy中的hstack()寺谤、vstack()、stack()吮播、concatenate()函數(shù)詳解

本文主要介紹一下numpy中的幾個常用函數(shù)变屁,包括hstack()、vstack()意狠、stack()敞贡、concatenate()。

1摄职、concatenate()

我們先來介紹最全能的concatenate()函數(shù)誊役,后面的幾個函數(shù)其實都可以用concatenate()函數(shù)來進行等價操作获列。

concatenate()函數(shù)根據(jù)指定的維度,對一個元組蛔垢、列表中的list或者ndarray進行連接击孩,函數(shù)原型:

numpy.concatenate((a1, a2, ...), axis=0)

先來看幾個例子,一個2*2的數(shù)組和一個1*2的數(shù)組鹏漆,在第0維進行拼接巩梢,得到一個3*2的數(shù)組:

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)

輸出為:

array([[1, 2],
       [3, 4],
       [5, 6]])

進一步,一個2*2的數(shù)組和一個2*1的數(shù)組艺玲,在第01維進行拼接括蝠,得到一個2*3的數(shù)組:

np.concatenate((a, b.T), axis=1)

輸出為:

array([[1, 2, 5],
       [3, 4, 6]])

上面兩個簡單的例子中,拼接的維度的長度是不同的饭聚,但是其他維度的長度必須是相同的忌警,這也是使用concatenate()函數(shù)的一個基本原則,違背此規(guī)則就會報錯秒梳,例如一個2*2的數(shù)組和一個1*2的數(shù)組法绵,在第1維進行拼接:

np.concatenate((a, b), axis=1)

上面的代碼會報錯:

ValueError: all the input array dimensions except for the concatenation axis must match exactly

2、stack()

stack()函數(shù)的原型是numpy.stack(arrays, axis=0)酪碘,即將一堆數(shù)組的數(shù)據(jù)按照指定的維度進行堆疊朋譬。
我們先看兩個簡單的例子:

a = np.array([1,2,3])
b = np.array([2,3,4])
np.stack([a,b],axis=0)

輸出為:

array([[1, 2, 3],
       [2, 3, 4]])

進一步:

np.stack([a,b],axis=1)

輸出為:

array([[1, 2],
       [2, 3],
       [3, 4]])

如果換作是二維數(shù)組:

a = np.array([[1,2,3]])
b = np.array([[2,3,4]])
np.stack([a,b],axis=0)

輸出為:

array([[[1, 2, 3]],

       [[2, 3, 4]]])

可以看到,進行stack的兩個數(shù)組必須有相同的形狀兴垦,同時徙赢,輸出的結果的維度是比輸入的數(shù)組都要多一維的。我們拿第一個例子來舉例探越,兩個含3個數(shù)的一維數(shù)組在第0維進行堆疊犀忱,其過程等價于先給兩個數(shù)組增加一個第0維,變?yōu)?*3的數(shù)組扶关,再在第0維進行concatenate()操作:

a = np.array([1,2,3])
b = np.array([2,3,4])
a = a[np.newaxis,:]
b = b[np.newaxis,:]
np.concatenate([a,b],axis=0)

輸出為:

array([[1, 2, 3],
       [2, 3, 4]])

3阴汇、vstack()

vstack()的函數(shù)原型:vstack(tup) ,參數(shù)tup可以是元組节槐,列表搀庶,或者numpy數(shù)組,返回結果為numpy的數(shù)組铜异。它是垂直(按照行順序)的把數(shù)組給堆疊起來哥倔。
舉兩個簡單的例子:

a = np.array([1,2,3])
b = np.array([2,3,4])
np.vstack([a,b])

輸出為:

array([[1, 2, 3],
       [2, 3, 4]])

進一步:

a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.vstack([a,b])

輸出為:

array([[1],
       [2],
       [3],
       [1],
       [2],
       [3]])

如果進行vstack的數(shù)組至少有兩維,那么相當于np.concatenate([a,b],axis=0)揍庄,我們通過例子進行對比:

a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=0)

輸出為:

array([[1],
       [2],
       [3],
       [1],
       [2],
       [3]])

可以看到咆蒿,跟剛才的結果是一致的,但是如果進行堆疊的兩個數(shù)組只有一維,那么結果是不同的:

a = np.array([1,2,3])
b = np.array([2,3,4])
np.concatenate([a,b],axis=0)

上面得到的結果為:

array([1, 2, 3, 2, 3, 4])

4沃测、hstack()

hstack()的函數(shù)原型:hstack(tup) 缭黔,參數(shù)tup可以是元組,列表蒂破,或者numpy數(shù)組馏谨,返回結果為numpy的數(shù)組。它其實就是水平(按列順序)把數(shù)組給堆疊起來附迷,與vstack()函數(shù)正好相反惧互。舉幾個簡單的例子:

a = np.array([1,2,3])
b = np.array([2,3,4])
np.hstack([a,b])

輸出為:

array([1, 2, 3, 2, 3, 4])

進一步,對于二維數(shù)組的情形:

a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.hstack([a,b])

輸出為:

array([[1, 1],
       [2, 2],
       [3, 3]])

如果進行hstack的數(shù)組至少有兩維喇伯,那么相當于np.concatenate([a,b],axis=1)

a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=1)

輸出跟剛才的結果是一致的

array([[1, 1],
       [2, 2],
       [3, 3]])

只有一維的情況下喊儡,并不等價于np.concatenate([a,b],axis=1),反而等價于np.concatenate([a,b],axis=0)稻据。

5艾猜、tf中的stack()

tensorflow中也提供了stack函數(shù),跟numpy中的stack函數(shù)的作用是一樣的攀甚,我們通過例子來體會:

import tensorflow as tf
a = tf.convert_to_tensor([1,2,3])
b = tf.convert_to_tensor([2,3,4])

stack_ab = tf.stack([a,b])

a1 = tf.expand_dims(a,axis=0)
b1 = tf.expand_dims(b,axis=0)
concat_ab = tf.concat([a1,b1],axis=0)

with tf.Session() as sess:
    print(sess.run(stack_ab))
    print(sess.run(concat_ab))

輸出為:

[[1 2 3]
 [2 3 4]]
[[1 2 3]
 [2 3 4]]
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市岗喉,隨后出現(xiàn)的幾起案子秋度,更是在濱河造成了極大的恐慌,老刑警劉巖钱床,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荚斯,死亡現(xiàn)場離奇詭異,居然都是意外死亡查牌,警方通過查閱死者的電腦和手機事期,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纸颜,“玉大人兽泣,你說我怎么就攤上這事⌒菜铮” “怎么了唠倦?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涮较。 經常有香客問我稠鼻,道長,這世上最難降的妖魔是什么狂票? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任候齿,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘慌盯。我一直安慰自己周霉,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布润匙。 她就那樣靜靜地躺著诗眨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孕讳。 梳的紋絲不亂的頭發(fā)上匠楚,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音厂财,去河邊找鬼芋簿。 笑死,一個胖子當著我的面吹牛璃饱,可吹牛的內容都是我干的与斤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荚恶,長吁一口氣:“原來是場噩夢啊……” “哼撩穿!你這毒婦竟也來了?” 一聲冷哼從身側響起谒撼,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤食寡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后廓潜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抵皱,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年辩蛋,在試婚紗的時候發(fā)現(xiàn)自己被綠了呻畸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悼院,死狀恐怖伤为,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情据途,我是刑警寧澤钮呀,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站昨凡,受9級特大地震影響爽醋,放射性物質發(fā)生泄漏。R本人自食惡果不足惜便脊,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一蚂四、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦遂赠、人聲如沸久妆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筷弦。三九已至,卻和暖如春抑诸,著一層夾襖步出監(jiān)牢的瞬間烂琴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工蜕乡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奸绷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓层玲,卻偏偏與公主長得像号醉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辛块,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容

  • 這三個函數(shù)有些相似性,都是堆疊數(shù)組授药,里面最難理解的應該就是stack()函數(shù)了士嚎,我查閱了numpy的官方文檔呜魄,在網...
    阿喆_399a閱讀 537評論 0 0
  • 基礎篇NumPy的主要對象是同種元素的多維數(shù)組悔叽。這是一個所有的元素都是一種類型、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,128評論 0 18
  • 來源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 32,801評論 6 97
  • 先決條件 在閱讀這個教程之前爵嗅,你多少需要知道點python娇澎。如果你想從新回憶下,請看看Python Tutoria...
    舒map閱讀 2,580評論 1 13
  • 介紹 NumPy 是一個 Python 包睹晒。 它代表 “Numeric Python”趟庄。 它是一個由多維數(shù)組對象和...
    喔蕾喔蕾喔蕾蕾蕾閱讀 1,780評論 0 5