NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié)
在Python的數(shù)據(jù)科學(xué)庫中,NumPy無疑是最受歡迎和最常用的庫之一。NumPy為大型多維數(shù)組和矩陣提供了強(qiáng)大的支持,并包含了一系列用于操作這些數(shù)組的函數(shù)。在這篇文章中,我們將深入探討NumPy中的兩個函數(shù):np.c_
和 np.r_
。這兩個函數(shù)都用于將多個數(shù)組按列(column)或行(row)拼接在一起,但它們之間有一些微妙的差異。
一、?? np.c_:按列拼接
np.c_
函數(shù)用于將多個一維或二維數(shù)組按列拼接在一起。這意味著它將數(shù)組水平地堆疊在一起。
代碼示例:
import numpy as np # 創(chuàng)建兩個一維數(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)建兩個二維數(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]]
如你所見,np.c_
函數(shù)將數(shù)組水平地堆疊在一起,意味者如果兩個數(shù)組的行數(shù)不相同,將會報錯:
import numpy as np # 創(chuàng)建兩個二維數(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)
運行報錯:
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ù)用于將多個一維或二維數(shù)組按行拼接在一起。這意味著它將數(shù)組垂直地堆疊在一起。
代碼示例:
import numpy as np # 創(chuàng)建兩個一維數(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)建兩個二維數(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ù)不匹配,也會出現(xiàn)類似的報錯。
三、?? 性能與內(nèi)存考慮
雖然 np.c_
和 np.r_
在功能上有所不同,但在大多數(shù)情況下,它們的性能差異并不顯著。然而,當(dāng)處理大型數(shù)據(jù)集時,理解這些函數(shù)的內(nèi)部工作原理和潛在的內(nèi)存影響是很重要的。
由于 np.c_
和 np.r_
都是基于NumPy的底層函數(shù)實現(xiàn)的,它們通常比使用Python的內(nèi)置列表拼接操作更快、更高效。這是因為NumPy能夠在C語言級別上執(zhí)行這些操作,從而避免了Python解釋器的開銷。
四、?? 使用場景分析
選擇使用 np.c_
還是 np.r_
取決于你的具體需求。
- 如果你需要將多個數(shù)組水平地堆疊在一起(即按列拼接),那么應(yīng)該使用
np.c_
。 - 如果你需要將多個數(shù)組垂直地堆疊在一起(即按行拼接),那么應(yīng)該使用
np.r_
。
此外,當(dāng)處理多維數(shù)組時,了解數(shù)組的形狀和維度是非常重要的。這將幫助你確定應(yīng)該使用 np.c_
還是 np.r_
,以確保得到期望的結(jié)果。
五、?? 總結(jié)
np.c_
和 np.r_
是NumPy庫中兩個非常有用的函數(shù),它們分別用于按列和按行拼接數(shù)組。雖然它們的功能相似,但它們之間的主要區(qū)別在于拼接的方向。了解這些差異并根據(jù)具體需求選擇適當(dāng)?shù)暮瘮?shù),將幫助你更有效地處理多維數(shù)組和矩陣。
在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和科學(xué)計算中,經(jīng)常需要對數(shù)組進(jìn)行各種變換和操作。np.c_ 和 np.r_ 提供了方便的方式來水平或垂直地堆疊數(shù)組,這對于數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos6.8安裝python3.7無法import _ssl的解決方法
這篇文章主要介紹了centos6.8安裝python3.7無法import _ssl的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09圖文詳解Django使用Pycharm連接MySQL數(shù)據(jù)庫
這篇文章主要介紹了Django使用Pycharm連接MySQL數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作大全
在后端應(yīng)用開發(fā)中,經(jīng)常會用到Postgres/Mysql/Mongo這三種數(shù)據(jù)庫的基本操作,今天小編就給大家詳細(xì)介紹Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作,感興趣的朋友一起看看吧2021-06-06