沿着第二轴连接2个1D numpy阵列

ric*_*ehe 9 arrays numpy concatenation index-error numpy-ndarray

执行

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

t3 = np.concatenate((t1,t2),axis=1)
Run Code Online (Sandbox Code Playgroud)

结果是

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)
Run Code Online (Sandbox Code Playgroud)

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

hpa*_*ulj 10

你的标题解释了它 - 一个1d阵列没有第二轴!

但话说回来,在我的系统上@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])
Run Code Online (Sandbox Code Playgroud)

这是我期望的结果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])
Run Code Online (Sandbox Code Playgroud)

当数组为1d时,它看起来像concatenate忽略axis参数.我不知道这是我的1.9版本中的新内容,还是旧版本.

欲了解更多控制考虑使用vstack,并hstack在需要时展开阵列尺寸封装:

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]])
Run Code Online (Sandbox Code Playgroud)


小智 7

如果你需要一个有两列的数组,你可以使用 column_stack:

import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
np.column_stack((t1,t2))
Run Code Online (Sandbox Code Playgroud)

哪个结果

[[ 1 11]
 [ 2 12]
 [ 3 13]
 [ 4 14]
 [ 5 15]
 [ 6 16]
 [ 7 17]
 [ 8 18]
 [ 9 19]]
Run Code Online (Sandbox Code Playgroud)


MLK*_*ing 6

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

t3 = np.concatenate((t1.reshape(-1,1),t2.reshape(-1,1),axis=1)
Run Code Online (Sandbox Code Playgroud)

说明:这是最初创建时的1D数组的形状:

t1 = np.arange(1,10)
t1.shape
>>(9,)
Run Code Online (Sandbox Code Playgroud)

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

t1.reshape(-1,1).shape
>>(9,1) 
Run Code Online (Sandbox Code Playgroud)


Roy*_*oyi 5

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

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