zoukankan      html  css  js  c++  java
  • numpy-合并与分割

    代码整理

    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)))            # 报错

    参考资料:

  • 相关阅读:
    Power of Cryptography(用double的泰勒公式可行分析)
    Radar Installation(贪心)
    The Pilots Brothers' refrigerator(dfs)
    Flip Game(dfs)
    Connect the Cities(MST prim)
    Constructing Roads (MST)
    suoi16 随机合并试卷 (dp)
    suoi14 子树查找 (dfs)
    nowcoder106I Neat Tree (单调栈)
    luogu2296 [NOIp2014]寻找道路 (bfs)
  • 原文地址:https://www.cnblogs.com/yanshw/p/14899368.html
Copyright © 2011-2022 走看看