你需要使用np.r_
和np.c_
。(类似于Matlab风格的范围生成函数,想象一下"列叠加"和"行叠加"。)
此外,还可参考np.concatenate
、np.vstack
、np.hstack
、np.dstack
、np.row_stack
、np.column_stack
等函数。
例如:
import numpy as np
m = np.zeros((10, 4))
v = np.ones((10, 1))
c = np.c_[m, v]
产生:
array([[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 1.]])
这也可以等同于np.hstack([m, v])
或np.column_stack([m, v])
如果你不熟悉 MATLAB,hstack
和column_stack
可能更易读且描述更清晰。 (因此在这种情况下它们可能更好。)
然而,np.c_
和np.r_
具有额外的功能,这些功能是来自MATLAB的人们倾向于期望的。例如:
In [7]: np.r_[1:5, 2]
Out[7]: array([1, 2, 3, 4, 2])
或者:
In [8]: np.c_[m, 0:10]
Out[8]:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 2.],
[ 0., 0., 0., 0., 3.],
[ 0., 0., 0., 0., 4.],
[ 0., 0., 0., 0., 5.],
[ 0., 0., 0., 0., 6.],
[ 0., 0., 0., 0., 7.],
[ 0., 0., 0., 0., 8.],
[ 0., 0., 0., 0., 9.]])
无论如何,对于Matlab用户来说,除了vstack
,hstack
等函数之外,了解np.r_
和np.c_
很方便。
[m v]
,而不是[m; v]
,对吧? - DSM