【问题标题】:Concatenation of 2 1D `numpy` Arrays Along 2nd Axis沿第二轴连接 2 个 1D `numpy` 数组
【发布时间】:2016-05-25 20:55:17
【问题描述】:

执行

import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)

t3 = np.concatenate((t1,t2),axis=1)

导致

Traceback (most recent call last):

  File "<ipython-input-264-85078aa26398>", line 1, in <module>
    t3 = np.concatenate((t1,t2),axis=1)

IndexError: axis 1 out of bounds [0, 1)

为什么会报告轴 1 超出范围?

【问题讨论】:

    标签: arrays numpy concatenation numpy-ndarray index-error


    【解决方案1】:

    你的标题解释了它 - 一维数组没有第二轴!

    但话虽如此,在我的系统和@Oliver W.s 上,它不会产生错误

    In [655]: np.concatenate((t1,t2),axis=1)
    Out[655]: 
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 11, 12, 13, 14, 15, 16, 17, 18,
           19])
    

    这是我对axis=0 的预期结果:

    In [656]: np.concatenate((t1,t2),axis=0)
    Out[656]: 
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 11, 12, 13, 14, 15, 16, 17, 18,
           19])
    

    当数组为 1d 时,concatenate 似乎忽略了 axis 参数。我不知道这是我 1.9 版本中的新内容,还是旧内容。

    如果需要更多控制,请考虑使用 vstackhstack 包装器,如果需要,它们会扩展数组维度:

    In [657]: np.hstack((t1,t2))
    Out[657]: 
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 11, 12, 13, 14, 15, 16, 17, 18,
           19])
    
    In [658]: np.vstack((t1,t2))
    Out[658]: 
    array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9],
           [11, 12, 13, 14, 15, 16, 17, 18, 19]])
    

    【讨论】:

      【解决方案2】:

      你最好使用 Numpy 的另一个函数 numpy.stack
      它的行为类似于 MATLAB 的 cat

      numpy.stack 函数不要求数组具有连接它们的维度。

      【讨论】:

        【解决方案3】:

        这是因为您需要将其更改为二维,因为一个维度不能与它连接。通过这样做,您可以添加一个空列。如果您运行以下代码,它将起作用:

        import numpy as np 
        t1 = np.arange(1,10)[None,:]
        t2 = np.arange(11,20)[None,:]
        t3 = np.concatenate((t1,t2),axis=1)
        print(t3)
        

        【讨论】:

          【解决方案4】:

          如果您需要一个包含两列的数组,您可以使用 column_stack:

          import numpy as np
          t1 = np.arange(1,10)
          t2 = np.arange(11,20)
          np.column_stack((t1,t2))
          

          哪些结果

          [[ 1 11]
           [ 2 12]
           [ 3 13]
           [ 4 14]
           [ 5 15]
           [ 6 16]
           [ 7 17]
           [ 8 18]
           [ 9 19]]
          

          【讨论】:

            【解决方案5】:

            这是因为 Numpy 表示一维数组的方式。以下使用 reshape() 将起作用:

            t3 = np.concatenate((t1.reshape(-1,1),t2.reshape(-1,1),axis=1)
            

            说明: 这是一维数组最初创建时的形状:

            t1 = np.arange(1,10)
            t1.shape
            >>(9,)
            

            'np.concatenate' 和许多其他函数不喜欢缺少的维度。 Reshape 执行以下操作:

            t1.reshape(-1,1).shape
            >>(9,1) 
            

            【讨论】:

              猜你喜欢
              • 2021-11-12
              • 2022-01-22
              • 2015-12-15
              • 1970-01-01
              • 2015-07-13
              • 2017-09-27
              • 2019-04-12
              • 2013-11-07
              相关资源
              最近更新 更多