沿第二轴连接 2 个 1D `numpy` 数组

Posted

技术标签:

【中文标题】沿第二轴连接 2 个 1D `numpy` 数组【英文标题】:Concatenation of 2 1D `numpy` Arrays Along 2nd Axis 【发布时间】: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 超出范围?

【问题讨论】:

【参考方案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) 

【讨论】:

以上是关于沿第二轴连接 2 个 1D `numpy` 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何对特定行上的 numpy 数组进行排序,其他行相应更改? [复制]

理解 numpy 的 dstack 函数

将 2D numpy 数组重塑为 3 个具有 x,y 索引的 1D 数组

Numpy quirk:将函数应用于两个 1D 数组的所有对,以获得一个 2D 数组

如何将 1d numpy 数组附加到 2d numpy 数组 python

在 1D-NumPy 数组中查找奇异值/局部最大值/最小值集(再次)