NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié)
在Python的數(shù)據(jù)科學(xué)庫(kù)中,NumPy無(wú)疑是最受歡迎和最常用的庫(kù)之一。NumPy為大型多維數(shù)組和矩陣提供了強(qiáng)大的支持,并包含了一系列用于操作這些數(shù)組的函數(shù)。在這篇文章中,我們將深入探討NumPy中的兩個(gè)函數(shù):np.c_
和 np.r_
。這兩個(gè)函數(shù)都用于將多個(gè)數(shù)組按列(column)或行(row)拼接在一起,但它們之間有一些微妙的差異。
一、?? np.c_:按列拼接
np.c_
函數(shù)用于將多個(gè)一維或二維數(shù)組按列拼接在一起。這意味著它將數(shù)組水平地堆疊在一起。
代碼示例:
import numpy as np # 創(chuàng)建兩個(gè)一維數(shù)組 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 使用 np.c_ 按列拼接 c = np.c_[a, b] print(c) print("*"*50) # 創(chuàng)建兩個(gè)二維數(shù)組 x = np.array([[1, 2], [3, 4]]) y = np.array([[5, 6], [7, 8]]) # 使用 np.c_ 按列拼接 z = np.c_[x, y] print(z)
輸出:
[[1 4]
[2 5]
[3 6]]
**************************************************
[[1 2 5 6]
[3 4 7 8]]
如你所見(jiàn),np.c_
函數(shù)將數(shù)組水平地堆疊在一起,意味者如果兩個(gè)數(shù)組的行數(shù)不相同,將會(huì)報(bào)錯(cuò):
import numpy as np # 創(chuàng)建兩個(gè)二維數(shù)組 x = np.array([[1, 2, 3], [3, 4, 5], [6, 7, 8]]) print(x.shape) # (3, 3) 三行三列 y = np.array([[5, 6], [7, 8]]) print(y.shape) # (2, 2) 兩行兩列 # 使用 np.c_ 按列拼接 z = np.c_[x, y] print(z)
運(yùn)行報(bào)錯(cuò):
ValueError: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 3 and the array at index 1 has size 2
二、?? np.r_:按行拼接
相比之下,np.r_
函數(shù)用于將多個(gè)一維或二維數(shù)組按行拼接在一起。這意味著它將數(shù)組垂直地堆疊在一起。
代碼示例:
import numpy as np # 創(chuàng)建兩個(gè)一維數(shù)組 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 使用 np.r_ 按行拼接 c = np.r_[a, b] print(c) print("*"*50) # 創(chuàng)建兩個(gè)二維數(shù)組 x = np.array([[1, 2], [3, 4]]) y = np.array([[5, 6]]) # 使用 np.r_ 按行拼接 z = np.r_[x, y] print(z)
輸出:
[1 2 3 4 5 6]
**************************************************
[[1 2]
[3 4]
[5 6]]
注意,當(dāng)使用 np.r_
進(jìn)行拼接時(shí),輸出數(shù)組的行數(shù)將是輸入數(shù)組行數(shù)的總和。同樣,如果輸入數(shù)組的列數(shù)不匹配,也會(huì)出現(xiàn)類似的報(bào)錯(cuò)。
三、?? 性能與內(nèi)存考慮
雖然 np.c_
和 np.r_
在功能上有所不同,但在大多數(shù)情況下,它們的性能差異并不顯著。然而,當(dāng)處理大型數(shù)據(jù)集時(shí),理解這些函數(shù)的內(nèi)部工作原理和潛在的內(nèi)存影響是很重要的。
由于 np.c_
和 np.r_
都是基于NumPy的底層函數(shù)實(shí)現(xiàn)的,它們通常比使用Python的內(nèi)置列表拼接操作更快、更高效。這是因?yàn)镹umPy能夠在C語(yǔ)言級(jí)別上執(zhí)行這些操作,從而避免了Python解釋器的開(kāi)銷。
四、?? 使用場(chǎng)景分析
選擇使用 np.c_
還是 np.r_
取決于你的具體需求。
- 如果你需要將多個(gè)數(shù)組水平地堆疊在一起(即按列拼接),那么應(yīng)該使用
np.c_
。 - 如果你需要將多個(gè)數(shù)組垂直地堆疊在一起(即按行拼接),那么應(yīng)該使用
np.r_
。
此外,當(dāng)處理多維數(shù)組時(shí),了解數(shù)組的形狀和維度是非常重要的。這將幫助你確定應(yīng)該使用 np.c_
還是 np.r_
,以確保得到期望的結(jié)果。
五、?? 總結(jié)
np.c_
和 np.r_
是NumPy庫(kù)中兩個(gè)非常有用的函數(shù),它們分別用于按列和按行拼接數(shù)組。雖然它們的功能相似,但它們之間的主要區(qū)別在于拼接的方向。了解這些差異并根據(jù)具體需求選擇適當(dāng)?shù)暮瘮?shù),將幫助你更有效地處理多維數(shù)組和矩陣。
在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和科學(xué)計(jì)算中,經(jīng)常需要對(duì)數(shù)組進(jìn)行各種變換和操作。np.c_ 和 np.r_ 提供了方便的方式來(lái)水平或垂直地堆疊數(shù)組,這對(duì)于數(shù)據(jù)預(yù)處理、特征工程以及構(gòu)建和訓(xùn)練模型等任務(wù)非常有用。
到此這篇關(guān)于NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)NumPy np.c_ 和 np.r_ 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos6.8安裝python3.7無(wú)法import _ssl的解決方法
這篇文章主要介紹了centos6.8安裝python3.7無(wú)法import _ssl的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09如何用Python進(jìn)行時(shí)間序列分解和預(yù)測(cè)
這篇文章主要介紹了如何用Python進(jìn)行時(shí)間序列分解和預(yù)測(cè),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02圖文詳解Django使用Pycharm連接MySQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了Django使用Pycharm連接MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python搭建代理IP池實(shí)現(xiàn)獲取IP的方法
這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)獲取IP的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全
在后端應(yīng)用開(kāi)發(fā)中,經(jīng)常會(huì)用到Postgres/Mysql/Mongo這三種數(shù)據(jù)庫(kù)的基本操作,今天小編就給大家詳細(xì)介紹Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作,感興趣的朋友一起看看吧2021-06-06