numpy數組合並和矩陣拼接的實現
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_ | 水平拼接,沿著行的方向,對列進行拼接 |
直接合並
將兩個一維數組合並成一個二維數組:
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拼接
append(arr, values, axis=None)
arr | 待合並的數組的復制(特別主頁是復制,所以要多耗費很多內存) |
values | 用來合並到上述數組復制的值。如果指定瞭下面的參數axis的話,則這些值必須和arr的shape一致(shape[axis]之外都相等),否則的話,則沒有要求。 |
axis | 要合並的軸. |
>>> 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扁平化再拼接,所以返回值為一個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]])
concatenate拼接
concatenate(a_tuple, axis=0, out=None)
a_tuple: | 對需要合並的數組用元組的形式給出 |
axis | 待合並的軸,默認為0 |
>>> 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方向的長度不一致,所以報錯
hstack
>>> np.hstack((ar1,ar2)) # 水平拼接,沿著行的方向,對列進行拼接 array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]])
vstack
>>> np.vstack((ar1,ar2)) # 垂直拼接,沿著列的方向,對行進行拼接 array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]])
vstack
>>> np.dstack((ar1,ar2)) # 對於2維數組來說,沿著第三軸(深度方向)進行拼接, 效果相當於stack(axis=-1) array([[[ 1, 7], [ 2, 8], [ 3, 9]], [[ 4, 11], [ 5, 12], [ 6, 13]]])
column_stack和row_stack
>>> 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]])
np.r_ 和np.c_
常用於快速生成ndarray數據
>>> 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]])
到此這篇關於numpy數組合並和矩陣拼接的實現的文章就介紹到這瞭,更多相關numpy數組合並和矩陣拼接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- numpy中數組拼接、數組合並方法總結(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)
- Python數據分析之堆疊數組函數示例總結
- numpy中hstack vstack stack concatenate函數示例詳解
- Python數組變形的幾種實現方法
- Numpy數組的組合與分割實現的方法