【问题标题】:Join numpy arrays of different dimensions and shapes加入不同尺寸和形状的numpy数组
【发布时间】:2021-03-02 12:16:33
【问题描述】:

我有 2 个arrays,一个形状为(2,2),另一个形状为(2,2,2)。我想将它们堆叠在一起,以便我的最终结果可以具有(3,2,2) 的形状。我会举例说明我在说什么

Array 1  ->    [ 1,2 ]      -> shape(2,2)
               [ 3,4 ]

Array 2  ->    [ 5,6 ]     [ 9,10  ]     -> shape (2,2,2)
               [ 7,8 ]     [ 11,12 ]
              

Final Array after stacking Arrays 1 and 2  ->  [ 1,2 ]       [ 5,6 ]     [ 9,10  ]    ->shape (3,2,2)
                                               [ 3,4 ]       [ 7,8 ]     [ 11,12 ]

【问题讨论】:

  • 如果您提供您尝试过的实际 Python代码以及描述,将更容易解决和理解。
  • 你有什么尝试吗?从产生的错误消息中学到什么?

标签: python numpy data-analysis


【解决方案1】:

为了更灵活地选择维度,您可以使用ravelreshape

import numpy as np
arr1 = np.arange(1, 5).reshape(2, 2)
arr2 = np.arange(5, 13).reshape(2, 2, 2)

stack = np.concatenate((arr1.ravel(),arr2.ravel())).reshape(3,2,2)

输出:

>>> stack
array([[[ 1,  2],
        [ 3,  4]],

       [[ 5,  6],
        [ 7,  8]],
    
       [[ 9, 10],
        [11, 12]]])

【讨论】:

  • 如果将arr1 重塑为 (1,2,2),则不需要 ravel 步骤。
  • @hpaulj ,嘿,那是真的。我试图尝试一种解决方案,其中 OP 几乎不必关心输入数组的维度。
【解决方案2】:

使用numpy.dstack,沿depth(第三个)轴堆叠您的数组:

import numpy as np

a = np.arange(1, 5).reshape(2, 2)
b = np.arange(5, 13).reshape(2, 2, 2)

c = np.dstack((a, b))
print(c)
#[[[ 1  5  6]
#  [ 2  7  8]]
#
# [[ 3  9 10]
#  [ 4 11 12]]]
print(c.shape)
#(2, 2, 3)

编辑:要获得所需的(3, 2, 2) 形状,您仍然可以使用np.dstack,但输入和输出转置:

c = np.dstack((a.T, b.T)).T
print(c)
#[[[ 1  2]
#  [ 3  4]]
#
# [[ 5  6]
#  [ 7  8]]
#
# [[ 9 10]
#  [11 12]]]
print(c.shape)
#(3, 2, 2)

【讨论】:

  • 我意识到我在我的问题中犯了一个错误。 np.dstack 创建第三列。但是,我不想要第三列。我希望最终结果的形状为 (3,2,2)。那是 3 个矩阵形状为 (2,2) 的数组
  • 形状 (2,2,3) 也是 3 个形状为 (2,2) 的数组,只是由最后一列而不是第一列索引。显然另一个答案解决了你的问题。
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2022-08-29
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多