Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 何时应该使用hstack/vstack vs append vs concatenate vs column\u stack?_Python_Numpy - Fatal编程技术网

Python 何时应该使用hstack/vstack vs append vs concatenate vs column\u stack?

Python 何时应该使用hstack/vstack vs append vs concatenate vs column\u stack?,python,numpy,Python,Numpy,简单的问题:每种方法的优点是什么。似乎在给定正确的参数(和ndarray形状)的情况下,它们看起来都是等效的。在适当的地方做一些工作?有更好的表现吗?在IPython中,您可以通过键入函数名,后跟?,查看函数的源代码。看看hstack,我们可以看到它实际上只是串联的包装(与vstack和列堆栈类似): 因此,我想只要使用听起来最符合逻辑的名称即可。所有函数都是用Python编写的,除了np.concatenate。对于IPython外壳,您只需使用? 如果没有,下面是他们的代码摘要: vstac

简单的问题:每种方法的优点是什么。似乎在给定正确的参数(和ndarray形状)的情况下,它们看起来都是等效的。在适当的地方做一些工作?有更好的表现吗?在IPython中,您可以通过键入函数名,后跟
,查看函数的源代码。看看
hstack
,我们可以看到它实际上只是
串联
的包装(与
vstack
列堆栈
类似):


因此,我想只要使用听起来最符合逻辑的名称即可。

所有函数都是用Python编写的,除了
np.concatenate
。对于IPython外壳,您只需使用

如果没有,下面是他们的代码摘要:

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)
也就是说,它扩展所有输入的DIM(有点像
np.expand_dims
),然后连接。当
轴=0时,效果与
np.array
相同

hstack
文档现在添加了:

函数
串联
堆栈
提供更通用的堆叠和连接操作


np.block
也是新的。实际上,它是沿着嵌套列表递归连接的。

numpy.vstack:按顺序垂直堆叠数组(行)。相当于
np.concatenate(tup,axis=0)
示例请参见:

numpy.hstack:按顺序水平堆叠数组(按列)。相当于
np.concatenate(tup,axis=1)
,但沿第一个轴串联的一维数组除外。示例见:

append是python内置数据结构
list
的函数。每次向列表中添加元素时。显然,要添加多个元素,您将使用
extend
。简单地说,numpy的功能要强大得多

例如:

假设gray.shape=(n0,n1)

np.vstack((灰色,灰色,灰色))
将具有形状(n0*3,n1),您也可以通过
np.concatenate((灰色,灰色,灰色),axis=0)来实现它。

np.hstack((灰色,灰色,灰色))
将具有形状(n0,n1*3),您也可以通过
np.concatenate((灰色,灰色,灰色),axis=1)来实现它。


np.dstack((灰色、灰色、灰色))
将具有形状(n0、n1、3)。

如果有两个矩阵,最好只使用
hstack
vstack

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)
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)
如果要堆叠矩阵和向量,
hstack
变得很难使用,因此
column\u stack
是一个更好的选择:

如果要叠加两个向量,则有三个选项:

原始形式的
串联
对于3D及以上版本非常有用,请参见
有关详细信息,请参阅我的文章。

这篇文章非常有用!!