numpy中hstack vstack stack concatenate函數(shù)示例詳解
大綱
本文主要介紹一下numpy中的幾個(gè)常用函數(shù),包括hstack()、vstack()、stack()、concatenate()。
1、concatenate()
我們先來介紹最全能的concatenate()函數(shù),后面的幾個(gè)函數(shù)其實(shí)都可以用concatenate()函數(shù)來進(jìn)行等價(jià)操作。
concatenate()函數(shù)根據(jù)指定的維度,對(duì)一個(gè)元組、列表中的list或者ndarray進(jìn)行連接,函數(shù)原型:
numpy.concatenate((a1, a2, ...), axis=0)
先來看幾個(gè)例子,一個(gè)2*2的數(shù)組和一個(gè)1*2的數(shù)組,在第0維進(jìn)行拼接,得到一個(gè)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]])
進(jìn)一步,一個(gè)2*2的數(shù)組和一個(gè)2*1的數(shù)組,在第01維進(jìn)行拼接,得到一個(gè)2*3的數(shù)組:
np.concatenate((a, b.T), axis=1)
輸出為:
array([[1, 2, 5], ? ? ? [3, 4, 6]])
上面兩個(gè)簡單的例子中,拼接的維度的長度是不同的,但是其他維度的長度必須是相同的,這也是使用concatenate()函數(shù)的一個(gè)基本原則,違背此規(guī)則就會(huì)報(bào)錯(cuò),例如一個(gè)2*2的數(shù)組和一個(gè)1*2的數(shù)組,在第1維進(jìn)行拼接:
np.concatenate((a, b), axis=1)
上面的代碼會(huì)報(bào)錯(cuò):
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ù)按照指定的維度進(jìn)行堆疊。
我們先看兩個(gè)簡單的例子:
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]])
進(jìn)一步:
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]]])
可以看到,進(jìn)行stack的兩個(gè)數(shù)組必須有相同的形狀,同時(shí),輸出的結(jié)果的維度是比輸入的數(shù)組都要多一維的。我們拿第一個(gè)例子來舉例,兩個(gè)含3個(gè)數(shù)的一維數(shù)組在第0維進(jìn)行堆疊,其過程等價(jià)于先給兩個(gè)數(shù)組增加一個(gè)第0維,變?yōu)?*3的數(shù)組,再在第0維進(jìn)行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ù)組,返回結(jié)果為numpy的數(shù)組。它是垂直(按照行順序)的把數(shù)組給堆疊起來。
舉兩個(gè)簡單的例子:
a = np.array([1,2,3]) b = np.array([2,3,4]) np.vstack([a,b])
輸出為:
array([[1, 2, 3], ? ? ? [2, 3, 4]])
進(jìn)一步:
a=[[1],[2],[3]] b=[[1],[2],[3]] np.vstack([a,b])
輸出為:
array([[1], ? ? ? [2], ? ? ? [3], ? ? ? [1], ? ? ? [2], ? ? ? [3]])
如果進(jìn)行vstack的數(shù)組至少有兩維,那么相當(dāng)于np.concatenate([a,b],axis=0),我們通過例子進(jìn)行對(duì)比:
a=[[1],[2],[3]] b=[[1],[2],[3]] np.concatenate([a,b],axis=0)
輸出為:
array([[1], ? ? ? [2], ? ? ? [3], ? ? ? [1], ? ? ? [2], ? ? ? [3]])
可以看到,跟剛才的結(jié)果是一致的,但是如果進(jìn)行堆疊的兩個(gè)數(shù)組只有一維,那么結(jié)果是不同的:
a = np.array([1,2,3]) b = np.array([2,3,4]) np.concatenate([a,b],axis=0)
上面得到的結(jié)果為:
array([1, 2, 3, 2, 3, 4])
4、hstack()
hstack()的函數(shù)原型:hstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組。它其實(shí)就是水平(按列順序)把數(shù)組給堆疊起來,與vstack()函數(shù)正好相反。舉幾個(gè)簡單的例子:
a = np.array([1,2,3]) b = np.array([2,3,4]) np.hstack([a,b])
輸出為:
array([1, 2, 3, 2, 3, 4])
進(jìn)一步,對(duì)于二維數(shù)組的情形:
a=[[1],[2],[3]] b=[[1],[2],[3]] np.hstack([a,b])
輸出為:
array([[1, 1], ? ? ? [2, 2], ? ? ? [3, 3]])
如果進(jìn)行hstack的數(shù)組至少有兩維,那么相當(dāng)于np.concatenate([a,b],axis=1)
a=[[1],[2],[3]] b=[[1],[2],[3]] np.concatenate([a,b],axis=1)
輸出跟剛才的結(jié)果是一致的
array([[1, 1], ? ? ? [2, 2], ? ? ? [3, 3]])
只有一維的情況下,并不等價(jià)于np.concatenate([a,b],axis=1),反而等價(jià)于np.concatenate([a,b],axis=0)。
5、tf中的stack()
tensorflow中也提供了stack函數(shù),跟numpy中的stack函數(shù)的作用是一樣的,我們通過例子來體會(huì):
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]]
以上就是numpy中hstack vstack stack concatenate函數(shù)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于numpy函數(shù)示例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- numpy.concatenate函數(shù)用法詳解
- numpy中數(shù)組拼接、數(shù)組合并方法總結(jié)(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)
- numpy數(shù)組做圖片拼接的實(shí)現(xiàn)(concatenate、vstack、hstack)
- numpy concatenate數(shù)組拼接方法示例介紹
- 詳解Numpy中的數(shù)組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
- 關(guān)于numpy.concatenate()函數(shù)的使用及說明
相關(guān)文章
Python根據(jù)URL地址下載文件并保存至對(duì)應(yīng)目錄的實(shí)現(xiàn)
這篇文章主要介紹了Python根據(jù)URL地址下載文件并保存至對(duì)應(yīng)目錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python實(shí)現(xiàn)刪除某列中含有空值的行的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)刪除某列中含有空值的行的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Python基礎(chǔ)學(xué)習(xí)之基本數(shù)據(jù)結(jié)構(gòu)詳解【數(shù)字、字符串、列表、元組、集合、字典】
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之基本數(shù)據(jù)結(jié)構(gòu),結(jié)合實(shí)例形式分析了Python數(shù)字、字符串、列表、元組、集合、字典等基本數(shù)據(jù)類型功能、原理及相關(guān)使用技巧,需要的朋友可以參考下2019-06-06Python實(shí)現(xiàn)二分法查找及優(yōu)化的示例詳解
二分查找法(Binary?Search)是一種在有序數(shù)組中查找某一特定元素的算法,在本文中,我們將使用?Python?實(shí)現(xiàn)二分查找算法,并深入探討算法的原理和實(shí)現(xiàn)細(xì)節(jié),感興趣的可以了解一下2023-04-04Python爬蟲+Tkinter制作一個(gè)翻譯軟件的示例
這篇文章主要介紹了Python爬蟲+Tkinter制作一個(gè)翻譯軟件的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02解決Numpy中sum函數(shù)求和結(jié)果維度的問題
今天小編大家分享一篇解決Numpy中sum函數(shù)求和結(jié)果維度的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12深入淺析python 協(xié)程與go協(xié)程的區(qū)別
這篇文章主要介紹了python 協(xié)程與go協(xié)程的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05