【问题标题】:Append element wise in numpy在 numpy 中明智地追加元素
【发布时间】:2020-12-29 12:38:23
【问题描述】:

我想附加两个 NumPy 数组。这两个数组具有相同的形状,我想附加两个数组的每个元素并将其存储在另一个计算成本较低的 NumPy 数组中。 例如:

a =  np.arange (12).reshape(4,3)
b = np.arange (2,14).reshape(4,3)

我想创建以下 np.array:

c = [[ (0,2)  (1,3)  (2,4)]
 [ (3,5)  (4,6)  (5,7)]
 [ (6,8)  (7,9) (8,10)]
 [(9,11) (10,12) (11,13)]]

需要注意的是,使用for循环可以创建,但是更高维度的计算成本是巨大的。最好使用矢量化的方式。 你能告诉我如何创建这个 np.array 吗?

【问题讨论】:

  • 这个有很多可能的重复项,也许你应该更清楚你想要实现的目标以及你的限制/假设是什么。
  • 这能回答你的问题吗? How to append numpy arrays?
  • 试试np.stack([a,b], axis=2)。另请注意,np.array([a,b] 会生成一个 (2,3,4) 数组,该数组可以转换为 (3,4,2)

标签: python arrays numpy scientific-computing


【解决方案1】:

目前尚不清楚您期望的形状,但我相信您正在寻找numpy.dstack

>>> a
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
>>> b
array([[ 2,  3,  4],
       [ 5,  6,  7],
       [ 8,  9, 10],
       [11, 12, 13]])
>>> np.dstack([a,b])
array([[[ 0,  2],
        [ 1,  3],
        [ 2,  4]],

       [[ 3,  5],
        [ 4,  6],
        [ 5,  7]],

       [[ 6,  8],
        [ 7,  9],
        [ 8, 10]],

       [[ 9, 11],
        [10, 12],
        [11, 13]]])

【讨论】:

    【解决方案2】:

    使用dstackreshape,您可以压缩和重组它们。 np.dstack((a, b)).reshape(4,3,2)

    剩下的就是

    [[[ 0  2]
      [ 1  3]
      [ 2  4]]
    
     [[ 3  5]
      [ 4  6]
      [ 5  7]]
    
     [[ 6  8]
      [ 7  9]
      [ 8 10]]
    
     [[ 9 11]
      [10 12]
      [11 13]]]
    

    应该提供与元组相同的功能。我尝试了多种方法,但没有设法将实际元组保留在 numpy 数组中

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多