代码整理

复制代码
import numpy as np

################################### 合并 ###################################
# hstack vstack 要求矩阵a,b 必须行列数一样, 行=行  列=列
a = np.floor(10 * np.random.rand(2, 2))
b = np.floor(10 * np.random.rand(2, 2))


################# hstack #################
#### hstack()在行上合并
np.hstack((a, b))
# array([[ 8.,  5.,  1.,  9.],
#        [ 1.,  6.,  8.,  5.]])


################# vstack #################
#### vstack()在列上合并
np.vstack((a, b))
# array([[ 8.,  5.],
#        [ 1.,  6.],
#        [ 1.,  9.],
#        [ 8.,  5.]])

print(np.vstack([a, b, b]))        # list 参数
# [[ 1.  4.]        a
#  [ 9.  5.]
#  [ 7.  6.]        b
#  [ 2.  9.]
#  [ 7.  6.]        b
#  [ 2.  9.]]
print(np.vstack((a, b, b)))         # tuple 参数


################# dstack #################
#### dstack 在深度上进行合并
a = np.zeros((3, 3, 1))
b = np.ones((3, 3, 1))
c = np.ones((3, 3, 1)) * 3

print(np.dstack([a, b, c]))
# [[[0. 1. 3.]
#   [0. 1. 3.]
#   [0. 1. 3.]]
#
#  [[0. 1. 3.]
#   [0. 1. 3.]
#   [0. 1. 3.]]
#
#  [[0. 1. 3.]
#   [0. 1. 3.]
#   [0. 1. 3.]]]


# 如果是随意增加一列  按行  row_stack  按列  column_stack
# print np.row_stack(a, b)


################# concatenate #################
# def concatenate(arrays, axis=None, out=None)
a = np.floor(10 * np.random.rand(2, 2))
b = np.floor(10 * np.random.rand(2, 2))
print(np.concatenate((a, b)))       ### 默认 axis=0,等价于 vstack
# [[1. 9.]
#  [6. 3.]
#  [4. 5.]
#  [6. 3.]]
print(np.concatenate((a, b), axis=1))   ### axis=1,等价于 hstack


################# c_ r_ #################
a = np.arange(1, 5)
b = np.arange(2, 6)
c = np.arange(3, 7)

print(np.c_[a, b, c])   # 按列合并
# [[1 2 3]
#  [2 3 4]
#  [3 4 5]
#  [4 5 6]]

print(np.r_[a, b, c])   # 按行合并
# [1 2 3 4 2 3 4 5 3 4 5 6]


################################### 切割 ###################################
a = np.random.randint(1, 10, size=(2, 5))
print(np.hsplit(a, 1))          ### 切割成 1 部分
# [array([[1, 6, 3, 3, 2],
#        [8, 5, 6, 3, 3]])]

print(np.vsplit(a, 2))          ### 切割成 2 部分
# [array([[1, 6, 3, 3, 2]]), array([[8, 5, 6, 3, 3]])]

print(np.hsplit(a, [1]))        ### 在行上进行分割,1 代表索引
# [array([[1],
#        [8]]), array([[6, 3, 3, 2],
#        [5, 6, 3, 3]])]

print(np.hsplit(a, [1, 3]))
# [array([[1],
#        [8]]), array([[6, 3],
#        [5, 6]]), array([[3, 2],
#        [3, 3]])]

print(np.vsplit(a, [1]))
# [array([[1, 6, 3, 3, 2]]), array([[8, 5, 6, 3, 3]])]
复制代码

 

注意

numpy 在合并时 行或者列 要保持一致,否则无法合并, 此时可以用 pandas

复制代码
x = pd.Series(range(1, 5))          # 
y = pd.Series(range(2, 5))          # 注意 x y 长度不一致
print(pd.concat([x, y], axis=1))    # x y 必须是 ’pandas 格式‘
#    0    1
# 0  1  2.0
# 1  2  3.0
# 2  3  4.0
# 3  4  NaN     自动填充 Nan

x = np.arange(1, 5)
y = np.arange(2, 5)
print(np.vstack((x, y)))            # 报错
复制代码

 

 

参考资料: