沿第二轴连接 2 个 1D `numpy` 数组
Concatenation of 2 1D `numpy` Arrays Along 2nd Axis
正在执行
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越界?
你的标题说明了这一点——一维数组没有第二轴!
不过话虽如此,在我的系统上和 @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版本的新东西,还是旧东西。
如需更多控制,请考虑使用 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]])
你最好使用一个名为 numpy.stack
的 Numpy 函数。
它的行为类似于 MATLAB 的 cat
。
numpy.stack
函数不要求数组具有它们串联的维度。
这是因为你需要把它变成二维的,因为一个维度不能连接。通过这样做,您可以添加一个空列。如果您 运行 以下代码,它会起作用:
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)
如果您需要一个包含两列的数组,您可以使用 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]]
这是因为 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)
正在执行
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越界?
你的标题说明了这一点——一维数组没有第二轴!
不过话虽如此,在我的系统上和 @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版本的新东西,还是旧东西。
如需更多控制,请考虑使用 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]])
你最好使用一个名为 numpy.stack
的 Numpy 函数。
它的行为类似于 MATLAB 的 cat
。
numpy.stack
函数不要求数组具有它们串联的维度。
这是因为你需要把它变成二维的,因为一个维度不能连接。通过这样做,您可以添加一个空列。如果您 运行 以下代码,它会起作用:
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)
如果您需要一个包含两列的数组,您可以使用 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]]
这是因为 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)