国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Numpy中的數組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

詳解Numpy中的數組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

2021-06-30 00:02guofei_fly Python

這篇文章主要介紹了詳解Numpy中的數組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Numpy中提供了concatenate,append, stack類(包括hsatck、vstack、dstack、row_stack、column_stack),r_和c_等類和函數用于數組拼接的操作。

各種函數的特點和區別如下標:

 

concatenate 提供了axis參數,用于指定拼接方向
append 默認先ravel再拼接成一維數組,也可指定axis
stack 提供了axis參數,用于生成新的維度
hstack 水平拼接,沿著行的方向,對列進行拼接
vstack 垂直拼接,沿著列的方向,對行進行拼接
dstack 沿著第三個軸(深度方向)進行拼接
column_stack 水平拼接,沿著行的方向,對列進行拼接
row_stack 垂直拼接,沿著列的方向,對行進行拼接
r_ 垂直拼接,沿著列的方向,對行進行拼接
c_ 水平拼接,沿著行的方向,對列進行拼接

 

0. 維度和軸

在正確理解Numpy中的數組拼接、合并操作之前,有必要認識下維度和軸的概念:

ndarray(多維數組)是Numpy處理的數據類型。多維數組的維度即為對應數據所在的空間維度,1維可以理解為直線空間,2維可以理解為平面空間,3維可以理解為立方體空間。

詳解Numpy中的數組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

軸是用來對多維數組所在空間進行定義、描述的一組正交化的直線,根據數學慣例可以用i,j,ki, j ,ki,j,k來表示。

在一維空間中,用一個軸就可以表示清楚,numpy中規定為axis 0,空間內的數可以理解為直線空間上的離散點 (x iii, )。

在二維空間中,需要用兩個軸表示,numpy中規定為axis 0和axis 1,空間內的數可以理解為平面空間上的離散點(x iii,y jjj)。

在三維空間中,需要用三個軸才能表示清楚,在二維空間的基礎上numpy中又增加了axis 2,空間內的數可以理解為立方體空間上的離散點(x iii,y jjj,z kkk)。

Python中可以用numpy中的ndim和shape來分別查看維度,以及在對應維度上的長度。直觀上可以根據符號“[ ]”的層數來判斷,有m層即為m維,最外面1層對應axis0, 依次為axis1,axis2…

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> a = np.array([1,2,3])
>>> a.ndim   # 一維數組
1
>>> a.shape   # 在這個維度上的長度為3
(3,)
 
>>> b = np.array([[1,2,3], [4,5,6]])
>>> b.ndim   # 二維數組
2
>>> b.shape   # 在axis 0 上的長度為2, 在axis 1上的長度為3.或者可以感性的理解為2行3列
(2, 3)
 
>>> c = np.array([[[1,2,3], [4,5,6]]])
>>> c.ndim   # 三維數組
3
>>> c.shape   # 在axis 0 上的長度為1,在axis 1上的長度為2, 在axis 2上的長度為3. 或者可以感性的理解為1層2行3列
(1, 2, 3)

1. np.concatenate()

?
1
2
3
4
5
6
concatenate(a_tuple, axis=0, out=None)
"""
參數說明:
a_tuple:對需要合并的數組用元組的形式給出
axis: 沿指定的軸進行拼接,默認0,即第一個軸
"""

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> import numpy as np
>>> ar1 = np.array([[1,2,3], [4,5,6]])
>>> ar2 = np.array([[7,8,9], [11,12,13]])
>>> ar1
array([[1, 2, 3],
    [4, 5, 6]])
>>> ar2
array([[ 7, 8, 9],
    [11, 12, 13]])
 
>>> np.concatenate((ar1, ar2))  # 這里的第一軸(axis 0)是行方向
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
 
>>> np.concatenate((ar1, ar2),axis=1# 這里沿第二個軸,即列方向進行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])
 
>>> ar3 = np.array([[14,15,16]]) # shape為(1,3)的2維數組
>>> np.concatenate((ar1, ar3))  # 一般進行concatenate操作的array的shape需要一致,當然如果array在拼接axis方向的size不一樣,也可以完成
>>> np.concatenate((ar1, ar3)) # ar3雖然在axis0方向的長度不一致,但axis1方向上一致,所以沿axis0可以拼接
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [14, 15, 16]])
>>> np.concatenate((ar1, ar3), axis=1# ar3和ar1在axis0方向的長度不一致,所以報錯

2. pd.append()

?
1
2
3
4
5
6
7
8
append(arr, values, axis=None)
"""
參數說明:
arr:array_like的數據
values: array_like的數據,若axis為None,則先將arr和values進行ravel扁平化,再拼接;否則values應當與arr的shape一致,或至多
    在拼接axis的方向不一致
axis:進行append操作的axis的方向,默認無
"""

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
>>> np.append(ar1, ar2)  # 先ravel扁平化再拼接,所以返回值為一個1維數組
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13])
 
>>> np.append(ar1, ar2, axis=0)   # 沿第一個軸拼接,這里為行的方向
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
 
>>> np.append(ar1, ar2, axis=1)   # 沿第二個軸拼接,這里為列的方向
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])

3. np.stack()

?
1
2
3
4
5
stack(arrays, axis=0, out=None)
"""
沿著指定的axis對arrays(每個array的shape必須一樣)進行拼接,返回值的維度比原arrays的維度高1
axis:默認為0,即第一個軸,若為-1即為第二個軸
"""

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> np.stack((ar1, ar2))   # 增加第一個維度(axis0,之后的axis向后順延:0—>1, 1—>2)
array([[[ 1, 2, 3],
    [ 4, 5, 6]],
    [[ 7, 8, 9],
    [11, 12, 13]]])
 
>>> np.stack((ar1, ar2), axis=1)   # 增加第二個維度(axis1,之后的axis向后順延, 1—>2)
array([[[ 1, 2, 3],
    [ 7, 8, 9]],
    [[ 4, 5, 6],
    [11, 12, 13]]])
 
>>> np.stack((ar1, ar2), axis=2)   # 增加第三個維度(axis2,和axis=-1的效果一樣,原來的axis0和axis1保持不變)
array([[[ 1, 7],
    [ 2, 8],
    [ 3, 9]],
    [[ 4, 11],
    [ 5, 12],
    [ 6, 13]]])

關于維度增加的一種理解方式

詳解Numpy中的數組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

4. hstack、vstack和vstack

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> np.hstack((ar1,ar2))  # 水平拼接,沿著行的方向,對列進行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])
 
>>> np.vstack((ar1,ar2))  # 垂直拼接,沿著列的方向,對行進行拼接
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
    
>>> np.dstack((ar1,ar2))  # 對于2維數組來說,沿著第三軸(深度方向)進行拼接, 效果相當于stack(axis=-1)
array([[[ 1, 7],
    [ 2, 8],
    [ 3, 9]],
    [[ 4, 11],
    [ 5, 12],
    [ 6, 13]]])

5. column_stack和row_stack

?
1
2
3
4
5
6
7
8
9
>>> np.column_stack((ar1,ar2))  # 水平拼接,沿著行的方向,對列進行拼接
array([[ 1, 2, 3, 7, 8, 9],
   [ 4, 5, 6, 11, 12, 13]])
 
>>> np.row_stack((ar1,ar2))  # 垂直拼接,沿著列的方向,對行進行拼接
array([[ 1, 2, 3],
   [ 4, 5, 6],
   [ 7, 8, 9],
   [11, 12, 13]])

6. np.r_ 和np.c_

常用于快速生成ndarray數據

?
1
2
3
4
5
6
7
8
9
>>> np.r_[ar1,ar2]   # 垂直拼接,沿著列的方向,對行進行拼接
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
 
>>> np.c_[ar1,ar2]  # 水平拼接,沿著行的方向,對列進行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])

7. 總結

對于兩個shape一樣的二維array來說:

增加行(對行進行拼接)的方法有:

?
1
2
3
4
5
np.concatenate((ar1, ar2),axis=0)
np.append(ar1, ar2, axis=0)
np.vstack((ar1,ar2))
np.row_stack((ar1,ar2))
np.r_[ar1,ar2]

增加列(對列進行拼接)的方法有:

?
1
2
3
4
5
np.concatenate((ar1, ar2),axis=1)
np.append(ar1, ar2, axis=1)
np.hstack((ar1,ar2))
np.column_stack((ar1,ar2))
np.c_[ar1,ar2]

相關代碼可見:https://github.com/guofei1989/python_func_cases/tree/master/numpy_demos

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/guofei_fly/article/details/85485173

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品美女久久久久久久久久久 | 91视频免费在线 | 免费在线一区二区 | 亚洲精品久久久久久久久久久 | 久久综合九九 | 欧美日韩一区二区视频在线观看 | 香蕉久久av一区二区三区 | 成人毛片在线观看 | 都市激情在线视频 | 日韩精品一二三区 | 激情久久av一区av二区av三区 | 亚洲成人三级 | 少妇精品久久久久久久久久 | 黄色毛片在线视频 | 91亚洲国产 | 国产精品美女久久久久久久久久久 | 自拍偷拍一区二区三区 | 日韩精品一区二区三区中文字幕 | 中国大陆一级毛片 | 一区精品视频 | 91社区在线观看 | 狠狠干2018 | 久久性色 | 亚洲精品第一区在线观看 | 亚洲成人久久久 | 日韩 欧美 精品 | 视频一区二区中文字幕 | 瑟瑟视频在线观看 | 亚洲精品久久久久久久久久久 | 亚洲片国产一区一级在线观看 | 亚洲 在线| 在线免费黄色 | 成人影院在线观看 | 看国产到性色 | 激情视频网 | 欧美大成色www永久网站婷 | 成人在线观 | 国产999精品久久久久久 | 欧美二区三区 | 精品国产91亚洲一区二区三区www | 国产精品国产精品国产专区不片 |