在NumPy中将单列列添加到矩阵中

时间:2018-05-31 05:08:16

标签: python python-3.x numpy

我有一个这个函数,它将1的列向量添加到矩阵中。

def add_ones(x):
    return np.hstack((np.ones((x.shape[0], 1)), x))

当x是一个矩阵时,它的工作正常。例如:

x = np.array([[1, 2], [3, 4]])
y = np.zeros((5, 5))
add_ones(x)
add_ones(y)

给出

[[1. 1. 2.]
 [1. 3. 4.]]
[[1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]]

然而,当我传递一个向量时:

z = np.zeros(5)
add_ones(z)

它给出了这个错误:

ValueError: all the input arrays must have same number of dimensions

我希望它返回

[1. 0. 0. 0. 0. 0.]

我该怎么办?

2 个答案:

答案 0 :(得分:1)

你的函数会创建一个2d数组,对吗?

def add_ones(x):
    return np.hstack((np.ones((x.shape[0], 1)), x))

这很好x也是2d。但是当x为1d时,这是错误的。您的函数需要注意x的形状,并在适当的时候创建一个数组。

类似的东西:

def add_ones(x):
    if x.ndim == 1:
        y = np.ones(1, x.dtype)
    elif x.ndim ==2:
        y = np.ones((x.shape[0],1), x.dtype)
    else: < do something else>
    return np.hstack((y, x))

答案 1 :(得分:0)

您必须向z添加另一个维度(使其成为二维5x1矩阵):

add_ones(z[:, np.newaxis])
#array([[ 1.,  0.],
 #      [ 1.,  0.],
#       [ 1.,  0.],
#       [ 1.,  0.],
#       [ 1.,  0.]])