【问题标题】:Stacking arrays in numpy在numpy中堆叠数组
【发布时间】:2018-06-05 08:28:40
【问题描述】:

我有两个数组:

A = np.array([1, 2, 3])
B = np.array([2, 3, 4])
C = np.stack((A, B), axis=0)

print C.shape
(2, 3)

形状不应该是(6,)吗?

【问题讨论】:

  • 不,你叠加在axis=0上,所以你创建了一个二维数组,其中C[0] == AC[1] == B。您可能正在寻找np.hstack((A,B))
  • 你的意思是,因为我在axis=0 上堆叠,所以为C 创建了一个新轴,它给出了(2, 3) 的形状?
  • 是的,它创建了一个新轴。来自文档[1],“沿新轴加入一系列数组。” [1]docs.scipy.org/doc/numpy-1.13.0/reference/generated/…
  • 轴 0 是行方向。轴 1 是结果的列方向(!)而不是参数。
  • stack 添加了一个新维度。 np.concatenate 在现有的基础上工作。

标签: python numpy stack


【解决方案1】:

由于您沿轴 0 堆叠。它正在做类似的事情

[[1,2,3],
 [4,5,6]]

如果你想要 (6,) 形状,你应该使用np.concatenate

【讨论】:

    【解决方案2】:

    使用np.stack() 函数,您可以指定您希望将哪个axis 视为索引轴。因此,如您所见,您永远不会得到6 的形状,在此示例中只有(2,3)(3,2),具体取决于您选择的轴。

    见下文:

    A = np.array([1, 2, 3])
    B = np.array([2, 3, 4])
    arrays = [A, B]
    

    使用此代码:

    print(np.stack(arrays, axis=0))
    

    你得到这个输出:

    [[1 2 3]
     [2 3 4]]
    

    使用此代码:

    print(np.stack(arrays, axis=1))
    

    你得到这个输出:

    [[1 2]
     [2 3]
     [3 4]]
    

    【讨论】: