Numpy Concatenate的问题?

时间:2018-06-12 01:00:25

标签: python numpy

我正在尝试使用numpy concatenate并遇到一个奇怪的错误。

我想理解为什么会失败:

a = np.arange(0,3)
b = np.arange(3,6)
c = np.array([a,b])
np.concatenate(c, axis=1)

AxisError:轴1超出了维1的数组

......但这成功了:

np.concatenate([c], axis=1)

并且这也成功了:

grid = np.array([[0,1,2], [3,4,5]])
print(grid)
np.concatenate([grid,grid], axis=1)

1 个答案:

答案 0 :(得分:2)

concatenate的第一个参数是一系列数组。当然,多维数组总是可以被视为一系列数组,因此传递c与传递(a, b)的方法相同。

因此,您连接的两个数组中的每一个都是1维的。你试图在它们没有的轴1上连接它们。因此错误。

如果要添加轴并沿新轴连接,那就是stack(或vstackhstack),而不是concatenate

与此同时,我不确定你想要获得什么输出,但是既然你已经创建了c,那么使用它可能更容易。例如:

  • stack((a, b))stack(c)或者,如果您坚持,concatenate([c])将全部给您array([[0, 1, 2], [3, 4, 5]]) ...但是只会使用c
  • stack((a, b), axis=1)等等会给你array([[0, 3], [1, 4], [2, 5]]),但c.T也是如此。

为什么np.concatenate([c], axis=1)成功了?好吧,[c]是一个2D数组的序列。当然它有一个轴1.因此它将该数组与任何数据连接起来,并返回与c完全相同的东西。

为什么np.concatenate([grid, grid], axis=1)成功,gridc的二维数组相同?因为[grid, grid]是两个2D数组的序列,所以每个都有一个轴1,所以它会将它们连接在一起,给你[[0, 1, 2, 0, 1, 2], [3, 4, 5, 3, 4, 5]]