我有一个这个函数,它将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.]
我该怎么办?
答案 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.]])