关于numpy的concatenate,hstack,vstack函数?

时间:2017-03-25 16:10:36

标签: python numpy

参见一些例子

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.concatenate((a,b), axis=0)) # [1,2,3,4,5,6]
print(np.hstack((a,b))) # [1,2,3,4,5,6]

print(np.vstack((a,b))) # [[1,2,3],[4,5,6]]
print(np.concatenate((a,b), axis=1)) # IndexError: axis 1 out of bounds [0, 1)

hstack的结果与沿轴= 0的连接相同,但api文档说hstack =沿轴= 1连接,请查看https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.hstack.html#numpy.hstack

沿轴= 1连接引发一个IndexError,api文件说hstack =沿轴= 0连接,请查看https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.vstack.html#numpy.vstack

任何人都可以解释一下吗?顺便说一下,当ndarray的维数小于2并且沿轴= 1连接时,是否可以解释如何广播?

2 个答案:

答案 0 :(得分:0)

查看hstack的实际代码:

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)

我在axis=1的文档中看不到任何内容。它使用的术语是'stack them horizontally'

正如我在一年前提到的那样,Concatenation of 2 1D numpy arrays along 2nd axis,如果轴太高,早期版本不会引发错误。但是在1.12中我们得到了一个错误。

有一个新的np.stack可以根据需要添加维度:

In [46]: np.stack((np.arange(3), np.arange(4,7)),axis=1)
Out[46]: 
array([[0, 4],
       [1, 5],
       [2, 6]])

基本功能是concatenate。各种stack函数以某种方式调整数组维度,然后执行concatenate。查看他们的代码以查看详细信息。 (我已经总结了之前帖子中的差异)。

答案 1 :(得分:0)

np.hstack(tup)np.concatenate(tup, axis=1)确实是等效的,但前提是tup包含至少为2维的数组。这实际上是在vstack的文档中详细说明的,所以看起来它只是一种疏忽,它在hstack的文档中也没有;但它会for future versions