一个简单的问题:每种方法的优点是什么?似乎给定正确的参数(和ndarray形状),它们似乎都等效地工作。做一些工作吗?有更好的表现?什么时候应该使用哪些功能?
一个简单的问题:每种方法的优点是什么?似乎给定正确的参数(和ndarray形状),它们似乎都等效地工作。做一些工作吗?有更好的表现?什么时候应该使用哪些功能?
Answers:
除了以外,所有功能都是用Python编写的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。
hstack 文档现在添加:
函数
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)。
在IPython中,您可以通过键入函数名称(后跟)来查看函数的源代码??。看一下,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)
因此,我想只要使用对您来说名称最合乎逻辑的名称即可。