给定以下二维数组:
a = np.array([
[1, 2, 3],
[2, 3, 4],
])
我想在第二轴上加上一列0,得到:
b = np.array([
[1, 2, 3, 0],
[2, 3, 4, 0],
])
给定以下二维数组:
a = np.array([
[1, 2, 3],
[2, 3, 4],
])
我想在第二轴上加上一列0,得到:
b = np.array([
[1, 2, 3, 0],
[2, 3, 4, 0],
])
当前回答
使用hstack的一种方法是:
b = np.hstack((a, np.zeros((a.shape[0], 1), dtype=a.dtype)))
其他回答
np。Concatenate也可以
>>> a = np.array([[1,2,3],[2,3,4]])
>>> a
array([[1, 2, 3],
[2, 3, 4]])
>>> z = np.zeros((2,1))
>>> z
array([[ 0.],
[ 0.]])
>>> np.concatenate((a, z), axis=1)
array([[ 1., 2., 3., 0.],
[ 2., 3., 4., 0.]])
使用hstack的一种方法是:
b = np.hstack((a, np.zeros((a.shape[0], 1), dtype=a.dtype)))
我也对这个问题感兴趣,比较了速度
numpy.c_[a, a]
numpy.stack([a, a]).T
numpy.vstack([a, a]).T
numpy.ascontiguousarray(numpy.stack([a, a]).T)
numpy.ascontiguousarray(numpy.vstack([a, a]).T)
numpy.column_stack([a, a])
numpy.concatenate([a[:,None], a[:,None]], axis=1)
numpy.concatenate([a[None], a[None]], axis=0).T
它们对任何输入向量a都做同样的事情。增长a的时间:
注意,所有不连续的变量(特别是stack/vstack)最终都比所有连续的变量快。如果需要连续,Column_stack(因为它的清晰性和速度)似乎是一个不错的选择。
代码重现情节:
import numpy as np
import perfplot
b = perfplot.bench(
setup=np.random.rand,
kernels=[
lambda a: np.c_[a, a],
lambda a: np.ascontiguousarray(np.stack([a, a]).T),
lambda a: np.ascontiguousarray(np.vstack([a, a]).T),
lambda a: np.column_stack([a, a]),
lambda a: np.concatenate([a[:, None], a[:, None]], axis=1),
lambda a: np.ascontiguousarray(np.concatenate([a[None], a[None]], axis=0).T),
lambda a: np.stack([a, a]).T,
lambda a: np.vstack([a, a]).T,
lambda a: np.concatenate([a[None], a[None]], axis=0).T,
],
labels=[
"c_",
"ascont(stack)",
"ascont(vstack)",
"column_stack",
"concat",
"ascont(concat)",
"stack (non-cont)",
"vstack (non-cont)",
"concat (non-cont)",
],
n_range=[2 ** k for k in range(23)],
xlabel="len(a)",
)
b.save("out.png")
在numpy数组中添加一个额外的列:
Numpy np。append方法有三个参数,前两个是2D numpy数组,第三个是一个轴参数,指示沿哪个轴追加:
import numpy as np
x = np.array([[1,2,3], [4,5,6]])
print("Original x:")
print(x)
y = np.array([[1], [1]])
print("Original y:")
print(y)
print("x appended to y on axis of 1:")
print(np.append(x, y, axis=1))
打印:
Original x:
[[1 2 3]
[4 5 6]]
Original y:
[[1]
[1]]
y appended to x on axis of 1:
[[1 2 3 1]
[4 5 6 1]]
有点晚了,但还没有人发布这个答案,所以为了完整起见:你可以在一个普通的Python数组上使用列表推导式来完成:
source = a.tolist()
result = [row + [0] for row in source]
b = np.array(result)