Numpy中提供了concatenate,append, stack類(包括hsatck、vstack、dstack、row_stack、column_stack),r_和c_等類和函數(shù)用于數(shù)組拼接的操作。
各種函數(shù)的特點(diǎn)和區(qū)別如下標(biāo):
concatenate | 提供了axis參數(shù),用于指定拼接方向 |
---|---|
append | 默認(rèn)先ravel再拼接成一維數(shù)組,也可指定axis |
stack | 提供了axis參數(shù),用于生成新的維度 |
hstack | 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 |
vstack | 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 |
dstack | 沿著第三個(gè)軸(深度方向)進(jìn)行拼接 |
column_stack | 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 |
row_stack | 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 |
r_ | 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 |
c_ | 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 |
直接合并
將兩個(gè)一維數(shù)組合并成一個(gè)二維數(shù)組:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import torch import numpy as np import matplotlib.pyplot as plt a = np.arange( 0 , 15 , 0.1 ) b = 1.088 * a + 0.638 + np.random.rand() * 10 print (a.shape,b.shape) points = np.array([a,b]) print (points.shape) ( 150 ,) ( 150 ,) ( 2 , 150 ) |
append拼接
1
|
append(arr, values, axis = None ) |
arr | 待合并的數(shù)組的復(fù)制(特別主頁(yè)是復(fù)制,所以要多耗費(fèi)很多內(nèi)存) |
values | 用來(lái)合并到上述數(shù)組復(fù)制的值。如果指定了下面的參數(shù)axis的話,則這些值必須和arr的shape一致(shape[axis]之外都相等),否則的話,則沒(méi)有要求。 |
axis | 要合并的軸. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> import numpy as np >>> ar1 = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> ar2 = np.array([[ 7 , 8 , 9 ], [ 11 , 12 , 13 ]]) >>> np.append(ar1, ar2) # 先ravel扁平化再拼接,所以返回值為一個(gè)1維數(shù)組 array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 11 , 12 , 13 ]) >>> np.append(ar1, ar2, axis = 0 ) # 沿第一個(gè)軸拼接,這里為行的方向 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ], [ 11 , 12 , 13 ]]) >>> np.append(ar1, ar2, axis = 1 ) # 沿第二個(gè)軸拼接,這里為列的方向 array([[ 1 , 2 , 3 , 7 , 8 , 9 ], [ 4 , 5 , 6 , 11 , 12 , 13 ]]) |
concatenate拼接
1
|
concatenate(a_tuple, axis = 0 , out = None ) |
a_tuple: | 對(duì)需要合并的數(shù)組用元組的形式給出 |
axis | 待合并的軸,默認(rèn)為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 ) # 這里沿第二個(gè)軸,即列方向進(jìn)行拼接 array([[ 1 , 2 , 3 , 7 , 8 , 9 ], [ 4 , 5 , 6 , 11 , 12 , 13 ]]) >>> ar3 = np.array([[ 14 , 15 , 16 ]]) # shape為(1,3)的2維數(shù)組 >>> np.concatenate((ar1, ar3)) # 一般進(jìn)行concatenate操作的array的shape需要一致,當(dāng)然如果array在拼接axis方向的size不一樣,也可以完成 >>> np.concatenate((ar1, ar3)) # ar3雖然在axis0方向的長(zhǎng)度不一致,但axis1方向上一致,所以沿axis0可以拼接 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 14 , 15 , 16 ]]) >>> np.concatenate((ar1, ar3), axis = 1 ) # ar3和ar1在axis0方向的長(zhǎng)度不一致,所以報(bào)錯(cuò) |
hstack
1
2
3
|
>>> np.hstack((ar1,ar2)) # 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 array([[ 1 , 2 , 3 , 7 , 8 , 9 ], [ 4 , 5 , 6 , 11 , 12 , 13 ]]) |
vstack
1
2
3
4
5
|
>>> np.vstack((ar1,ar2)) # 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ], [ 11 , 12 , 13 ]]) |
vstack
1
2
3
4
5
6
7
|
>>> np.dstack((ar1,ar2)) # 對(duì)于2維數(shù)組來(lái)說(shuō),沿著第三軸(深度方向)進(jìn)行拼接, 效果相當(dāng)于stack(axis=-1) array([[[ 1 , 7 ], [ 2 , 8 ], [ 3 , 9 ]], [[ 4 , 11 ], [ 5 , 12 ], [ 6 , 13 ]]]) |
column_stack和row_stack
1
2
3
4
5
6
7
8
9
|
>>> np.column_stack((ar1,ar2)) # 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 array([[ 1 , 2 , 3 , 7 , 8 , 9 ], [ 4 , 5 , 6 , 11 , 12 , 13 ]]) >>> np.row_stack((ar1,ar2)) # 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ], [ 11 , 12 , 13 ]]) |
np.r_ 和np.c_
常用于快速生成ndarray數(shù)據(jù)
1
2
3
4
5
6
7
8
9
|
>>> np.r_[ar1,ar2] # 垂直拼接,沿著列的方向,對(duì)行進(jìn)行拼接 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ], [ 11 , 12 , 13 ]]) >>> np.c_[ar1,ar2] # 水平拼接,沿著行的方向,對(duì)列進(jìn)行拼接 array([[ 1 , 2 , 3 , 7 , 8 , 9 ], [ 4 , 5 , 6 , 11 , 12 , 13 ]]) |
到此這篇關(guān)于numpy數(shù)組合并和矩陣拼接的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)numpy數(shù)組合并和矩陣拼接內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/weixin_45755332/article/details/112570897