hstack
和 vstack
:
如果你要堆叠一个矩阵和一个向量,则使用 hstack
变得棘手,所以更好的选择是使用 column_stack
:
如果你要堆叠两个向量,则有三种选项:
concatenate
的原始形式适用于3D及以上,请参见我的文章Numpy Illustrated获取详细信息。
np.concatenate
。如果使用IPython shell,只需使用??
即可。vstack
concatenate([atleast_2d(_m) for _m in tup], 0)
i.e. turn all inputs in to 2d (or more) and concatenate on first
hstack
concatenate([atleast_1d(_m) for _m in tup], axis=<0 or 1>)
colstack
transform arrays with (if needed)
array(arr, copy=False, subok=True, ndmin=2).T
append
concatenate((asarray(arr), values), axis=axis)
np.stack
:arrays = [asanyarray(arr) for arr in arrays]
shapes = set(arr.shape for arr in arrays)
result_ndim = arrays[0].ndim + 1
axis = normalize_axis_index(axis, result_ndim)
sl = (slice(None),) * axis + (_nx.newaxis,)
expanded_arrays = [arr[sl] for arr in arrays]
concatenate(expanded_arrays, axis=axis, out=out)
np.expand_dims
),然后进行串联。 使用axis=0
,其效果与np.array
相同。
文档现在添加:
函数
concatenate
、stack
和block
提供了更一般的堆叠和串联操作。
np.block
也是新的。 它实际上是沿嵌套列表递归连接。numpy.vstack:将数组沿垂直方向(行方向)按顺序叠加。等同于np.concatenate(tup, axis=0)
,示例请参见:https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html
numpy.hstack:将数组沿水平方向(列方向)按顺序叠加。等同于np.concatenate(tup, axis=1)
,但对于一维数组,它是沿第一个轴连接。 示例请参见:https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html
append是Python内置数据结构list
的函数。每次添加元素到列表中,显然,要添加多个元素,你将使用extend
。简而言之,NumPy的函数更加强大。
示例:
假设gray.shape = (n0,n1)
np.vstack((gray,gray,gray))
将具有形状(n0*3, n1),也可以通过np.concatenate((gray,gray,gray),axis=0)
来实现
np.hstack((gray,gray,gray))
将具有形状(n0, n1*3),也可以通过np.concatenate((gray,gray,gray),axis=1)
来实现
np.dstack((gray,gray,gray))
将具有形状(n0, n1,3)。
??
来查看函数的源代码。查看hstack
,我们可以看到它实际上只是concatenate
的包装器(类似于vstack
和column_stack
)。np.hstack??
def hstack(tup):
...
arrs = [atleast_1d(_m) for _m in tup]
# As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
if arrs[0].ndim == 1:
return _nx.concatenate(arrs, 0)
else:
return _nx.concatenate(arrs, 1)
所以,我猜你只需使用那个名称最符合逻辑的。
append
在内部使用concatenate
。除了如果没有给定axis
,append
会将两个参数都展平之外,append
和concatenate
之间没有区别。相比于concatenate
,append
节省了一些按键次数 - 这是它存在的唯一好处 :) 在Pandas中,他们正在弃用append
,而推荐使用concat
(concatenate
的快捷方式),因为使用append
逐步向数据框追加行的做法是不好的,而应该将它们追加到Python列表中,并在一次操作中进行连接(这样更快)。 - Antony Hatchkins