網(wǎng)站首頁 編程語言 正文
numpy 堆疊數(shù)組
在做圖像和 nlp 的數(shù)組數(shù)據(jù)處理的時候,經(jīng)常需要實(shí)現(xiàn)兩個數(shù)組堆疊或者連接的功能,這就需用到 numpy
庫的一些函數(shù),numpy 庫中的常用堆疊數(shù)組函數(shù)如下:
-
stack
: Join a sequence of arrays along a new axis. -
hstack
: Stack arrays in sequence horizontally (column wise). -
vstack
: Stack arrays in sequence vertically (row wise). -
dstack
: Stack arrays in sequence depth wise (along third axis). -
concatenate
: Join a sequence of arrays along an existing axis.
ravel() 函數(shù)
ravel() 方法可讓將多維數(shù)組展平成一維數(shù)組。如果不指定任何參數(shù),ravel() 將沿著行(第 0 維/軸)展平/拉平輸入數(shù)組。
示例代碼如下:
std_array = np.random.normal(3, 2.5, size=(2, 4)) array1d = std_array.ravel() print(std_array) print(array1d)
程序輸出結(jié)果如下:
[[5.68301857 2.09696067 2.20833423 2.83964393]
?[2.38957339 9.66254303 1.58419716 2.82531094]]
?
[5.68301857 2.09696067 2.20833423 2.83964393 2.38957339 9.66254303 1.58419716 2.82531094]
stack() 函數(shù)
stack() 函數(shù)原型是 stack(arrays,?axis=0,?out=None),功能是沿著給定軸連接數(shù)組序列,軸默認(rèn)為第0維。
1,參數(shù)解析:
- arrays: 類似數(shù)組(數(shù)組、列表)的序列,這里的每個數(shù)組必須有相同的shape。
- axis: 默認(rèn)為整形數(shù)據(jù),axis決定了沿著哪個維度stack輸入數(shù)組。
2,返回:
- stacked :
ndarray
類型。The stacked array has one more dimension than the input arrays.
實(shí)例如下:
import numpy as np # 一維數(shù)組進(jìn)行stack a1 = np.array([1, 3, 4]) # shape (3,) b1 = np.array([4, 6, 7]) # shape (3,) c1 = np.stack((a,b)) print(c1) print(c1.shape) # (2,3) # 二維數(shù)組進(jìn)行堆疊 a2 = np.array([[1, 3, 5], [5, 6, 9]]) # shape (2,3) b2 = np.array([[1, 3, 5], [5, 6, 9]]) # shape (2,3) c2 = np.stack((a2, b2), axis=0) print(c2) print(c2.shape)
輸出為:
[[1 3 4] [4 6 7]]
(2, 3)
[[[1 3 5] [5 6 9]] [[1 3 5] [5 6 9]]] (2, 2, 3)
可以看到,進(jìn)行 stack 的兩個數(shù)組必須有相同的形狀,同時,輸出的結(jié)果的維度是比輸入的數(shù)組都要多一維的。我們拿第一個例子來舉例,兩個含 3 個數(shù)的一維數(shù)組在第 0 維進(jìn)行堆疊,其過程等價于先給兩個數(shù)組增加一個第0維,變?yōu)?*3的數(shù)組,再在第 0 維進(jìn)行 concatenate()
操作:
a = np.array([1, 3, 4]) b = np.array([4, 6, 7]) a = a[np.newaxis,:] b = b[np.newaxis,:] np.concatenate([a,b],axis=0)
輸出為:
array([[1, 2, 3], ? ? ? [2, 3, 4]])
vstack()函數(shù)
vstack函數(shù)原型是vstack(tup),功能是垂直的(按照行順序)堆疊序列中的數(shù)組。tup是數(shù)組序列(元組、列表、數(shù)組),數(shù)組必須在所有軸上具有相同的shape,除了第一個軸。1-D arrays must have the same length.
# 一維數(shù)組 a = np.array([1, 2, 3]) b = np.array([2, 3, 4]) np.vstack((a,b))
array([[1, 2, 3], [2, 3, 4]])
# 二維數(shù)組 a = np.array([[1], [2], [3]]) b = np.array([[2], [3], [4]]) np.vstack((a,b))
array([[1], [2], [3], [2], [3], [4]])
hstack()函數(shù)
hstack()的函數(shù)原型:hstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組。它其實(shí)就是**水平(按列順序)**把數(shù)組給堆疊起來,與vstack()函數(shù)正好相反。舉幾個簡單的例子:
# 一維數(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 = np.array([[1], [2], [3]]) b = np.array([[2], [3], [4]]) np.hstack((a,b))
array([[1, 2], [2, 3], [3, 4]])
vstack()和hstack函數(shù)對比:
這里的v是vertically的縮寫,代表垂直(沿著行)堆疊數(shù)組,這里的h是horizontally的縮寫,代表水平(沿著列)堆疊數(shù)組。 tup是數(shù)組序列(元組、列表、數(shù)組),數(shù)組必須在所有軸上具有相同的shape,除了第一個軸。
concatenate() 函數(shù)
concatenate()函數(shù)功能齊全,理論上可以實(shí)現(xiàn)上面三個函數(shù)的功能,concatenate()函數(shù)根據(jù)指定的維度,對一個元組、列表中的list或者ndarray進(jìn)行連接,函數(shù)原型:
numpy.concatenate((a1, a2, ...), axis=0)
a = np.array([[1, 2], [3,4]]) b = np.array([[5, 6], [7, 8]]) # a、b的shape為(2,2),連接第一維就變成(4,2),連接第二維就變成(2,4) np.concatenate((a, b), axis=0)
array([[1, 2], [3, 4], [5, 6], [7, 8]])
注意:axis指定的維度(即拼接的維度)可以是不同的,但是axis之外的維度(其他維度)的長度必須是相同的。注意 concatenate 函數(shù)使用最廣,必須在項(xiàng)目中熟練掌握。
參考資料?numpy中的hstack()、vstack()、stack()、concatenate()函數(shù)詳解
原文鏈接:https://juejin.cn/post/7202945024747667515
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-05-15 python自動化測試之Selenium詳解_python
- 2022-10-18 linux下shell腳本備份文件的方法實(shí)現(xiàn)_linux shell
- 2022-12-29 解決React報錯You?provided?a?`checked`?prop?to?a?form?f
- 2022-07-12 element表格循環(huán)校驗(yàn),確保數(shù)據(jù)不重復(fù)
- 2022-07-09 C++深入探究用NULL來初始化空指針是否合適_C 語言
- 2022-07-12 windows系統(tǒng)-串口設(shè)備導(dǎo)致鼠標(biāo)亂跳的問題
- 2022-11-12 C語言內(nèi)存操作函數(shù)使用示例梳理講解_C 語言
- 2022-10-17 多階段構(gòu)建優(yōu)化Go?程序Docker鏡像_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支