numpy中數(shù)組的堆疊方法
一、環(huán)境
Anaconda 3
Python 3.6
Numpy 1.14.3
二、功能用途及官方說(shuō)明
1、hstack功能:沿水平方向堆疊數(shù)組(numpy array)
用途舉例:機(jī)器學(xué)習(xí)數(shù)據(jù)集準(zhǔn)備過(guò)程中,可以用于將數(shù)據(jù)列與標(biāo)簽列在水平方向上合并,從而得到帶標(biāo)簽的數(shù)據(jù)集
官方說(shuō)明:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.hstack.html#numpy.hstack
2、vstack功能:沿垂直方向堆疊數(shù)組(numpy array)
用途舉例:機(jī)器學(xué)習(xí)數(shù)據(jù)集準(zhǔn)備過(guò)程中,可以用于將從過(guò)個(gè)數(shù)據(jù)文件中加載的數(shù)據(jù)行在垂直方向上合并,從而將所有數(shù)據(jù)集整合為一個(gè)數(shù)據(jù)集
官方說(shuō)明:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.vstack.html
三、實(shí)例
實(shí)例一:使用 np.hstack 將數(shù)據(jù)與標(biāo)簽合并
>>> import numpy as np # 數(shù)據(jù)準(zhǔn)備 >>> data = [i for i in range(18)] >>> data_array = np.asarray(data) >>> data_array = np.asarray(data).reshape([6,3]) >>> data_array.shape (6, 3) >>> data_array array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11], [12, 13, 14], [15, 16, 17]]) # 標(biāo)簽準(zhǔn)備 >>> label = [0, 1] *3 >>> label_array = np.asarray(label) >>> label_array.shape (6,) >>> label_array array([0, 1, 0, 1, 0, 1]) # 在數(shù)據(jù)的右側(cè)水平方向上合并標(biāo)簽 >>> data_label = np.hstack((data_array,label_array)) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py", line 288, in hstack return _nx.concatenate(arrs, 1) ValueError: all the input arrays must have same number of dimensions
直觀上看, np.hstack 只要保證要合并的兩個(gè) numpy 數(shù)組的數(shù)據(jù)行相同,那么兩個(gè) numpy 數(shù)組的列就可以沿著水平方向合并了!這里也是初學(xué)者常遇到個(gè)一個(gè)問(wèn)題,仔細(xì)看一下報(bào)錯(cuò)信息就會(huì)很容易發(fā)現(xiàn),問(wèn)題出在要合并的兩個(gè) numpy 數(shù)組的維度數(shù)量不一致,data_array 的維度是二維(6, 3),而 label_array 的維度是一維 (6, ),因此即使兩個(gè) numpy 數(shù)組的行數(shù)一樣,也不能沿水平方向進(jìn)行正常的列堆疊!
正確的方法:
# 在準(zhǔn)備標(biāo)簽時(shí),先將一維的標(biāo)簽 reshape 為二維 numpy 數(shù)組,即 6 行 1 列 >>> label_array = label_array.reshape(-1,1) >>> data_label = np.hstack((data_array,label_array)) >>> data_label.shape (6, 4) >>> data_label array([[ 0, 1, 2, 0], [ 3, 4, 5, 1], [ 6, 7, 8, 0], [ 9, 10, 11, 1], [12, 13, 14, 0], [15, 16, 17, 1]])
實(shí)例二:使用 np.vstack 合并兩組數(shù)據(jù)集
# 準(zhǔn)備第一數(shù)據(jù)集 >>> import numpy as np >>> data1 = np.random.normal(0,1,(2,5)) >>> data1.shape (2, 5) >>> data1 array([[-1.49100993, 0.03782522, 0.33961941, -0.64073217, 0.84000297], [-1.02662855, -0.91858614, -0.27410549, -0.86956142, -0.44147313]]) # 準(zhǔn)備第二個(gè)數(shù)據(jù)集 >>> data2 = np.arange(0,30,2) >>> data2 = np.arange(0,30,2).reshape([3,5]) >>> data2.shape (3, 5) >>> data2 array([[ 0, 2, 4, 6, 8], [10, 12, 14, 16, 18], [20, 22, 24, 26, 28]]) # 垂直方向堆疊連個(gè)數(shù)據(jù)集 >>> data = np.vstack((data1,data2)) >>> data.shape (5, 5) >>> data array([[-1.49100993, 0.03782522, 0.33961941, -0.64073217, 0.84000297], [-1.02662855, -0.91858614, -0.27410549, -0.86956142, -0.44147313], [ 0. , 2. , 4. , 6. , 8. ], [10. , 12. , 14. , 16. , 18. ], [20. , 22. , 24. , 26. , 28. ]])
實(shí)例三:借助列表(list)對(duì)多個(gè)數(shù)據(jù)集進(jìn)行一次性堆疊合并
可以用于在 for / while 循環(huán)讀取數(shù)據(jù)集時(shí),依次先將數(shù)據(jù)加入到列表(list)中,然后在多個(gè)數(shù)據(jù)集一起堆疊合并,而不用在繁瑣地使用兩兩數(shù)據(jù)集堆疊合并的方式了
# 準(zhǔn)備第一個(gè)數(shù)據(jù)集 >>> data_v1 = np.random.randint(0,10,(2,5)) >>> data_v1.shape (2, 5) >>> data_v1 array([[4, 4, 0, 7, 3], [3, 9, 0, 3, 0]]) # 準(zhǔn)備第二個(gè)數(shù)據(jù)集 >>> data_v2 = np.ones((3,5)) >>> data_v2.shape (3, 5) >>> data_v2 array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]]) # 準(zhǔn)備第三個(gè)數(shù)據(jù)集 >>> data_v3 = np.full((2,5),0) >>> data_v3.shape (2, 5) >>> data_v3 array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]) # 定義一個(gè)臨時(shí)存放多個(gè)數(shù)據(jù)集的列表(list),并將所有數(shù)據(jù)集添加到列表中 >>> data_vlist = [] >>> data_vlist.append(data_v1) >>> data_vlist.append(data_v2) >>> data_vlist.append(data_v3) >>> len(data_vlist) 3 >>> data_vlist [array([[4, 4, 0, 7, 3], [3, 9, 0, 3, 0]]), array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]]), array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])] # 將存放所有數(shù)據(jù)集的列表作為 np.vstack() 的輸入?yún)?shù),即可一次性合并多個(gè)數(shù)據(jù)集 >>> data_vstack = np.vstack(data_vlist) >>> data_vstack array([[4., 4., 0., 7., 3.], [3., 9., 0., 3., 0.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) >>> data_vstack.shape (7, 5) >>> data_vstack array([[4., 4., 0., 7., 3.], [3., 9., 0., 3., 0.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) #########################################################
同理,np.hstack 也可以借助列表(list)一次性水平合并多個(gè)數(shù)據(jù)列
# 準(zhǔn)備首個(gè)數(shù)列 >>> import numpy as np >>> data_h1 = np.random.randint(0, 10, (3,3)) >>> data_h1.shape (3, 3) >>> data_h1 array([[6, 4, 5], [4, 5, 0], [7, 1, 9]]) # 準(zhǔn)備第二個(gè)數(shù)列 >>> data_h2 = np.zeros((3,2)) >>> data_h2.shape (3, 2) >>> data_h2 array([[0., 0.], [0., 0.], [0., 0.]]) # 準(zhǔn)備第三個(gè)數(shù)列 >>> data_h3 = np.ones((3,1), dtype=int) >>> data_h3.shape (3, 1) >>> data_h3 array([[1], [1], [1]]) # 定義一個(gè)臨時(shí)存放多個(gè)數(shù)據(jù)列的列表(list),并將所有數(shù)據(jù)列添加到列表中 >>> data_hlist = [] >>> data_hlist.append(data_h1) >>> data_hlist.append(data_h2) >>> data_hlist.append(data_h3) >>> len(data_hlist) 3 >>> data_hlist [array([[6, 4, 5], [4, 5, 0], [7, 1, 9]]), array([[0., 0.], [0., 0.], [0., 0.]]), array([[1], [1], [1]])] # 將存放所有數(shù)據(jù)列的列表作為 np.hstack() 的輸入?yún)?shù),即可一次性合并多個(gè)數(shù)據(jù)列 >>> data_hstack = np.hstack(data_hlist) >>> data_hstack.shape (3, 6) >>> data_hstack array([[6., 4., 5., 0., 0., 1.], [4., 5., 0., 0., 0., 1.], [7., 1., 9., 0., 0., 1.]])
到此這篇關(guān)于numpy中數(shù)組的堆疊方法的文章就介紹到這了,更多相關(guān)numpy 數(shù)組堆疊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)時(shí)間o(1)的最小棧的實(shí)例代碼
這篇文章主要介紹了python實(shí)現(xiàn)時(shí)間o(1)的最小棧的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python存儲(chǔ)或讀取json時(shí)如何引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)
這篇文章主要介紹了Python存儲(chǔ)或讀取json時(shí)如何引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06python實(shí)現(xiàn)字符串完美拆分split()的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)字符串完美拆分split()的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python輸出列表(List)不帶中括號(hào)和引號(hào)的問(wèn)題及解決方法
這篇文章主要介紹了Python輸出列表(List)不帶中括號(hào)和引號(hào)的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02python?字符串索引取值的實(shí)現(xiàn)示例
本文主要介紹了python?字符串索引取值的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07