我正在尝试使用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)
答案 0 :(得分:2)
concatenate
的第一个参数是一系列数组。当然,多维数组总是可以被视为一系列数组,因此传递c
与传递(a, b)
的方法相同。
因此,您连接的两个数组中的每一个都是1维的。你试图在它们没有的轴1上连接它们。因此错误。
如果要添加轴并沿新轴连接,那就是stack
(或vstack
或hstack
),而不是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)
成功,grid
与c
的二维数组相同?因为[grid, grid]
是两个2D数组的序列,所以每个都有一个轴1,所以它会将它们连接在一起,给你[[0, 1, 2, 0, 1, 2], [3, 4, 5, 3, 4, 5]]
。