【问题标题】:How to vertically concatenate two arrays in Python? [duplicate]如何在 Python 中垂直连接两个数组? [复制]
【发布时间】:2018-06-23 17:51:00
【问题描述】:

我想使用 NumPy 包在 Python 中垂直连接两个数组:

a = array([1,2,3,4])
b = array([5,6,7,8])

我想要这样的东西:

c = array([[1,2,3,4],[5,6,7,8]])

我们如何使用concatenate 函数来做到这一点?我检查了这两个函数,但结果是一样的:

c = concatenate((a,b),axis=0)
# or
c = concatenate((a,b),axis=1)

我们在这两个函数中都有这个:

c = array([1,2,3,4,5,6,7,8])

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    问题在于ab 都是一维数组,因此只有一个轴可以连接它们。

    相反,您可以使用vstackv 表示垂直):

    >>> np.vstack((a,b))
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    

    另外,row_stackvstack 函数的别名:

    >>> np.row_stack((a,b))
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    

    同样值得注意的是,多个相同长度的数组可以一次堆叠。例如,np.vstack((a,b,x,y)) 将有四行。

    在底层,vstack 的工作原理是确保每个数组至少有两个维度(使用atleast_2D),然后调用concatenate 在第一个轴上加入这些数组(axis=0)。

    【讨论】:

      【解决方案2】:

      也许这不是一个好的解决方案,但它是让你的代码工作的简单方法,只需添加 reshape:

      a = array([1,2,3,4])
      b = array([5,6,7,8])
      
      c = concatenate((a,b),axis=0).reshape((2,4))
      
      print c
      

      出来:

      [[1 2 3 4]
       [5 6 7 8]]
      

      一般来说,如果你有超过 2 个长度相同的数组:

      reshape((number_of_arrays, length_of_array))
      

      【讨论】:

        【解决方案3】:

        使用np.vstack:

        In [4]:
        
        import numpy as np
        a = np.array([1,2,3,4])
        b = np.array([5,6,7,8])
        c = np.vstack((a,b))
        c
        Out[4]:
        array([[1, 2, 3, 4],
               [5, 6, 7, 8]])
        
        In [5]:
        
        d = np.array ([[1,2,3,4],[5,6,7,8]])
        d
        ​
        Out[5]:
        array([[1, 2, 3, 4],
               [5, 6, 7, 8]])
        In [6]:
        
        np.equal(c,d)
        Out[6]:
        array([[ True,  True,  True,  True],
               [ True,  True,  True,  True]], dtype=bool)
        

        【讨论】:

          【解决方案4】:

          要使用concatenate,您需要制作ab 二维数组而不是一维数组,如

          c = concatenate((atleast_2d(a), atleast_2d(b)))
          

          或者,你可以简单地做

          c = array((a,b))
          

          【讨论】:

          • 感谢您的回答。我们如何使用array 进行水平连接?是否仅用于垂直连接?
          • @user2991243 可以使用axis参数来控制连接哪个轴,默认为0
          猜你喜欢
          • 2014-03-20
          • 1970-01-01
          • 2013-06-08
          • 1970-01-01
          • 1970-01-01
          • 2020-12-09
          • 2021-11-12
          相关资源
          最近更新 更多